Widzę dziwne zachowanie, gdy używam zerowej instrukcji wyłącznika w aktualizacji VS2015 1, której nie widzę w innych wersjach Visual Studio, gdzie działa zgodnie z oczekiwaniami.Nullable Długie oświadczenie przełącznika nie produkujące oczekiwanego wyjścia w VS2015
class Program
{
static void Main(string[] args)
{
NullableTest(-1);
NullableTest(0);
NullableTest(1);
NullableTest(2);
NullableTest(null);
}
public static void NullableTest(long? input)
{
string switch1;
switch (input)
{
case 0:
switch1 = "0";
break;
case 1:
switch1 = "1";
break;
default:
switch1 = "d";
break;
}
string switch2;
switch (input)
{
case -1:
switch2 = "-1";
break;
case 0:
switch2 = "0";
break;
case 1:
switch2 = "1";
break;
default:
switch2 = "d";
break;
}
string ifElse;
if (input == 0)
{
ifElse = "0";
}
else if (input == 1)
{
ifElse = "1";
}
else
{
ifElse = "d";
}
Console.WriteLine("Input = {0}, Switch 1 output = {1}, Switch 2 output = {2}, If Else = {3}", input, switch1, switch2, ifElse);
}
Kod ten przykład daje następujący wynik (wyrównany dla czytelności):
Input = -1, Switch 1 output = d, Switch 2 output = d, If Else = d
Input = 0, Switch 1 output = 0, Switch 2 output = d, If Else = 0
Input = 1, Switch 1 output = d, Switch 2 output = d, If Else = 1
Input = 2, Switch 1 output = d, Switch 2 output = d, If Else = d
Input = , Switch 1 output = d, Switch 2 output = d, If Else = d
Ja tylko obserwacji tego zachowania z pustych typów. Nielegalne typy działają zgodnie z oczekiwaniami.
pamiętać, że jest nie samo zachowanie, które jest w this question, i nie jest to spowodowane przez this kompilatora błędu, który został ustalony w VS2015 Aktualizacja 1. Mam sprawdzeniu, że oba te przykłady funkcjonować poprawnie.