What if you could update data without rewriting everything or risking mistakes?
Why With expressions for immutable copies in C Sharp (C#)? - Purpose & Use Cases
Imagine you have a person object with many details, and you want to create a new person just like the first but with one small change, like a new address.
Doing this manually means copying every detail by hand, which is tiring and easy to mess up.
Manually copying all properties is slow and error-prone.
You might forget to copy some fields or accidentally change the original object.
This makes your code messy and hard to maintain.
With expressions let you create a new object by copying an existing one and changing only what you want.
This keeps your objects immutable (unchanged) and your code clean and safe.
var newPerson = new Person { Name = oldPerson.Name, Age = oldPerson.Age, Address = "New Address" };var newPerson = oldPerson with { Address = "New Address" };
It enables easy, safe updates to data without changing the original, making your programs more reliable and easier to understand.
Think of a contact list app where you want to update a person's phone number without losing their other info or accidentally changing the original contact.
Manual copying is slow and risky.
With expressions create new objects by changing only what you want.
This keeps data safe and code simple.
Practice
with expression do in C# when used with records?Solution
Step 1: Understand the purpose of
Thewithexpressionwithexpression is designed to create a new object by copying an existing one but allows changing some properties.Step 2: Compare behavior with original object
The original object remains unchanged; only the new object has the updated properties.Final Answer:
Creates a new record by copying an existing one and changing specified properties -> Option AQuick Check:
With expression = new copy with changes [OK]
- Thinking with modifies the original object
- Assuming with deletes the original object
- Believing with copies without allowing changes
person2 from person1 with a changed Age property using a with expression?Solution
Step 1: Recall the correct syntax for with expressions
The correct syntax is:var newRecord = oldRecord with { Property = value };Step 2: Match the syntax with options
var person2 = person1 with { Age = 30 }; matches the correct syntax exactly, others have misplaced keywords or incorrect order.Final Answer:
var person2 = person1 with { Age = 30 }; -> Option DQuick Check:
Correct syntax = var person2 = person1 with { Age = 30 }; [OK]
- Placing 'with' before the variable
- Using incorrect braces or order
- Trying to assign property outside braces
public record Person(string Name, int Age);
var person1 = new Person("Alice", 25);
var person2 = person1 with { Age = 30 };
Console.WriteLine(person1.Age);
Console.WriteLine(person2.Age);Solution
Step 1: Understand the with expression effect on Age
person2is a new record copied fromperson1but withAgechanged to 30.person1remains unchanged withAge25.Step 2: Determine the printed values
Printingperson1.Ageoutputs 25, printingperson2.Ageoutputs 30.Final Answer:
25 30 -> Option CQuick Check:
Original Age = 25, New Age = 30 [OK]
- Assuming original object changes
- Mixing up which object's property is printed first
- Expecting both to have same Age
public record Point(int X, int Y); var p1 = new Point(5, 10); var p2 = p1 with (X = 7);
Solution
Step 1: Check syntax of with expression
The with expression requires braces{ }around property assignments, not parentheses( ).Step 2: Identify the error in code
Code useswith (X = 7)which is invalid syntax; it should bewith { X = 7 }.Final Answer:
Using parentheses instead of braces in with expression -> Option AQuick Check:
with uses braces, not parentheses [OK]
- Using parentheses instead of braces
- Thinking with can't change properties
- Assuming with is not allowed on records
public record Address(string City, string Country);
public record Person(string Name, int Age, Address Address);
var addr1 = new Address("Paris", "France");
var person1 = new Person("Bob", 40, addr1);
var person2 = person1 with { Address = person1.Address with { City = "Lyon" } };
Console.WriteLine(person1.Address.City);
Console.WriteLine(person2.Address.City);Solution
Step 1: Understand nested with expressions
person2is a newPersoncopied fromperson1, but itsAddressproperty is also copied and changed with a newCityvalue "Lyon".Step 2: Determine original and new city values
person1.Address.Cityremains "Paris" because original objects are immutable.person2.Address.Cityis "Lyon" due to the nested with expression.Final Answer:
Paris Lyon -> Option BQuick Check:
Nested with copies inner object with changes [OK]
- Assuming inner object changes original
- Expecting both cities to be same
- Not using nested with for inner property change
Ready to prove it?
Pass the test and this pattern moves unknown
