A with expression copies a record while changing selected values.

with expression A `with` expression creates a modified copy of a record.

With Expressions

fontSize
WithExpressions.cs
Replay: real traced execution (multi-file project)
using System;

record Settings(string Theme, int FontSize)
{
    public override string ToString()
    {
        return Theme + ":" + FontSize;
    }
}

class Program
{
    static void Main()
    {
        int fontSize = 16;
        Settings original = new Settings("light", 14);
        Settings updated = original with { FontSize = fontSize };

        Console.WriteLine($"fontSize={fontSize}");
        Console.WriteLine($"original={original.Theme}:{original.FontSize}");
        Console.WriteLine($"updated={updated.Theme}:{updated.FontSize}");
    }
}
using System;

record Settings(string Theme, int FontSize)
{
    public override string ToString()
    {
        return Theme + ":" + FontSize;
    }
}

class Program
{
    static void Main()
    {
        int fontSize = 12;
        Settings original = new Settings("light", 14);
        Settings updated = original with { FontSize = fontSize };

        Console.WriteLine($"fontSize={fontSize}");
        Console.WriteLine($"original={original.Theme}:{original.FontSize}");
        Console.WriteLine($"updated={updated.Theme}:{updated.FontSize}");
    }
}
using System;

record Settings(string Theme, int FontSize)
{
    public override string ToString()
    {
        return Theme + ":" + FontSize;
    }
}

class Program
{
    static void Main()
    {
        int fontSize = 20;
        Settings original = new Settings("light", 14);
        Settings updated = original with { FontSize = fontSize };

        Console.WriteLine($"fontSize={fontSize}");
        Console.WriteLine($"original={original.Theme}:{original.FontSize}");
        Console.WriteLine($"updated={updated.Theme}:{updated.FontSize}");
    }
}
  1. fontSize ← 16, original ← light:14, updated ← light:16

    12{13    static void Main()14    {15        int fontSize→ 16 = 16; //@fontSize=12, 2016        Settings original→ light:14 = new Settings("light", 14);17        Settings updated→ light:16 = originallight:14 with { FontSize = fontSize16 };1819        Console.WriteLine($"fontSize={fontSize16}");20        Console.WriteLine($"original={original.Themelight}:{original.FontSize14}");21        Console.WriteLine($"updated={updated.Themelight}:{updated.FontSize16}");22    }
    outputfontSize=16
    original=light:14
    updated=light:16
  1. fontSize ← 12, original ← light:14, updated ← light:12

    12{13    static void Main()14    {15        int fontSize→ 12 = 12;16        Settings original→ light:14 = new Settings("light", 14);17        Settings updated→ light:12 = originallight:14 with { FontSize = fontSize12 };1819        Console.WriteLine($"fontSize={fontSize12}");20        Console.WriteLine($"original={original.Themelight}:{original.FontSize14}");21        Console.WriteLine($"updated={updated.Themelight}:{updated.FontSize12}");22    }
    outputfontSize=12
    original=light:14
    updated=light:12
  1. fontSize ← 20, original ← light:14, updated ← light:20

    12{13    static void Main()14    {15        int fontSize→ 20 = 20;16        Settings original→ light:14 = new Settings("light", 14);17        Settings updated→ light:20 = originallight:14 with { FontSize = fontSize20 };1819        Console.WriteLine($"fontSize={fontSize20}");20        Console.WriteLine($"original={original.Themelight}:{original.FontSize14}");21        Console.WriteLine($"updated={updated.Themelight}:{updated.FontSize20}");22    }
    outputfontSize=20
    original=light:14
    updated=light:20