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 s
não corresponde a quando s == null
porque (efetivamente) (null as string) != null
avalia 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
var
esse 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.
switch
pode 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 null
regras 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 x
se comporta de forma diferente do quevar x
mesmo quandox
é digitado (pelo compilador) comostring