Records and Modern Types
With Expressions
A with expression copies a record while changing selected values.
with expression
A `with` expression creates a modified copy of a record.
With Expressions
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}");
}
}
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
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
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