DEV Community

Cover image for C# record with expression
Karen Payne
Karen Payne

Posted on

C# record with expression

Introduction

The with expression creates a new object with modified properties

Example 1

Add a new Product to a list, then use the CategoryId value when adding a second item to the list with the with expression.

results

Model

public record Product(int Id, string Name, int CategoryId)
{
    public int Id { get; set; } = Id;
    public string Name { get; set; } = Name;
    public int CategoryId { get; set; } = CategoryId;
}
Enter fullscreen mode Exit fullscreen mode

List<Product> products = [];

Product product = new(1, "Football", 2);
products.Add(product);
products.Add(product with { Id = 2, Name = "Golf" });

foreach (var (id, name, categoryId) in products)
{
    Console.WriteLine($"{id,-3}: {name,-20}{categoryId}");
}
Enter fullscreen mode Exit fullscreen mode

Example 2

An extension of Example 1 that uses a Dictionary to add data.

results

var (products, categories) = MockedData.GetProductsAndCategories();

Dictionary<int, string> dictionary = new()
{
    [2] = "Golf",
    [3] = "Formula 1 racing",
    [4] = "Soccer"
};

Product product = new(1, "Football", 2);
products.Add(product);

foreach (var (key, value) in dictionary)
{
    products.Add(product with { Id = key, Name = value });
}

var joined =
    products.Join(
        categories,
        p => p.CategoryId,
        c => c.Id,
        (p, c) => new
        {
            ProductId = p.Id,
            ProductName = p.Name,
            CategoryName = c.Name
        });

foreach (var item in joined)
{
    Console.WriteLine($"{item.ProductId,-3}: {item.ProductName,-20}{item.CategoryName}");
}
Enter fullscreen mode Exit fullscreen mode

Real life

Imagine a file service that reads files by file name, which determines the product category. This would be a good case for the with expression.

Source code

Top comments (0)