feat: add note about empty object match

This commit is contained in:
Oli Sturm
2024-11-13 16:07:20 +00:00
parent 0bb8cf43d5
commit 768d01a37d
+12 -5
View File
@@ -3,7 +3,8 @@
namespace CS8 { namespace CS8 {
class Program { class Program {
// This is a "switch expression" // This is a "switch expression"
static int CalcResult(int input) => input switch { static int CalcResult(int input) => input switch
{
1 => 2, 1 => 2,
2 => 3, 2 => 3,
_ => throw new ArgumentException("Rien ne va plus") _ => throw new ArgumentException("Rien ne va plus")
@@ -42,15 +43,21 @@ namespace CS8 {
} }
// Prize question: what is the point of this? // Prize question: what is the point of this?
if (customer is { } c) { if (customer.Address is { } a) {
// Work with c -- it is not null and matches the (empty, but // Work with a -- it is not null and matches the (empty, but
// extensible) property pattern. // extensible) property pattern.
// c is a copy of the object reference, which may be useful in multi- // a is a copy of the object reference, which may be useful in multi-
// threading scenarios. // threading scenarios.
// Some people really like this pattern, but in most cases // Some people really like this pattern, but in most cases
// if (customer is not null) { ... } is just a good. // if (customer.Address is not null) { ... } is just a good.
// (And btw, "is not null" is not really faster than "!= null" -- but // (And btw, "is not null" is not really faster than "!= null" -- but
// it could be, and it expresses intention more explicitly. // it could be, and it expresses intention more explicitly.
// Perhaps best answer: it's like a "with" statement, allowing
// short access to the property path now. And note: a is not
// an empty object here, it's the same type as the source
// at customer.Address.
Console.WriteLine($"Address.City is {a.City}");
} }
} }
} }