Dado o seguinte código:
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;
}
Por que a instrução switch está ativada case var o?
É meu entendimento que case string snão corresponde a quando s == nullporque (efetivamente) (null as string) != nullavalia como falso. O IntelliSense no VS Code me diz que também oé string. Alguma ideia?
Semelhante a: caso de switch C # 7 com verificações nulas
varesse contexto. Isso com certeza parece o tipo de coisa que eu encontraria em C ++, não em uma linguagem que pretende levar o programador "ao poço do sucesso". Aqui, varé ambíguo e inútil, coisas que o design C # normalmente parece se esforçar para evitar.
switchpode ser impronunciável - tipos anônimos, etc; e não é ambíguo - o compilador conhece claramente o tipo; é apenas confuso (pelo menos para mim) que as nullregras sejam tão diferentes!
oéstring(confirmado com genéricos - ou seja,Foo(o)ondeFoo<T>(T template) => typeof(T).Name) - é um caso muito interessante ondestring xse comporta de forma diferente do quevar xmesmo quandoxé digitado (pelo compilador) comostring