Gegeben den folgenden Code:
string someString = null;
switch (someString)
{
case string s:
Console.WriteLine("string s");
break;
case var o:
Console.WriteLine("var o");
break;
default:
Console.WriteLine("default");
break;
}
Warum stimmt die switch-Anweisung überein case var o?
Es ist mein Verständnis, case string sdas nicht übereinstimmt, wenn, s == nullweil (effektiv) (null as string) != nullals falsch bewertet. IntelliSense auf VS Code sagt mir, dass dies auch ein oist string. Irgendwelche Gedanken?
Ähnlich wie: C # 7-Schalterfall mit Nullprüfungen
varin diesem Zusammenhang überhaupt zuzulassen . Das scheint sicher die Art von Dingen zu sein, die ich in C ++ finden würde, nicht in einer Sprache, die den Programmierer "in die Grube des Erfolgs" führen soll. Hier varist sowohl mehrdeutig als auch nutzlos, Dinge, die C # -Design normalerweise zu vermeiden scheint.
switchkönnte unaussprechlich sein - anonyme Typen usw.; und es ist nicht mehrdeutig - der Compiler kennt den Typ genau; Es ist nur verwirrend (zumindest für mich), dass die nullRegeln so unterschiedlich sind!
osiestring(mit Generika bestätigt - dhFoo(o)woFoo<T>(T template) => typeof(T).Name) - es ist ein sehr interessanter Fall,string xverhält sich anders alsvar xselbst wennxeingegeben wird (durch den Compiler) alsstring