C#7 introduces a new feature called patterns, which you can use with Is-Expression or Switch cases like this:
string str = null;
switch(str){
case string x:
Console.WriteLine("string " + x);
break;
default:
Console.WriteLine("default");
break;
}
and you would expect that it will goes inside case #1, as it is the same type, but it didn't.
Despite what you might think,
string x = null
actually isn't a string at all. It is 'nothing', assigned to a variable of type string.The check in your switch is basically the same as
null is string
which isfalse
for a long time already. This is a common issue when evaluating types with generics, but it has its plus sides too.Under the hood,
is
usesas
, with a null check. So that is why it can't return true. You could say the logic for theis
operator is as follows:actually they are not because of the null on string.
the idea is that switch cases with patterns in c#7 adds another case for Null checking while evaluating the cases, and if you didn't add your Null case check, it will go to default case, so it is better to add a null case while using this new feature, or leave it to default if you know what default will do.
Hope it helps!