Z jakiegoś powodu M1()
powoduje błąd kompilatora, natomiast M2()
, który robi to samo, nie powoduje błędu. Każdy pomysł, dlaczego?C# 7 Błąd kompilatora - Dopasowywanie wzorca
Używanie false ==
powinno być takie samo jak korzystanie z operatora nie, !
.
Zastosowanie nieprzydzielonej zmiennej lokalnej 'i'
class Program {
static void Main(string[] args) {
int x = 8;
M1(x);
M2(x);
} // Main()
public static void M1(Object obj) {
if (false == (obj is int i)) // Causes ERROR on WriteLine
return;
System.Console.WriteLine(i); // Use of unassigned local variable 'i'
}
public static void M2(Object obj) {
if (!(obj is int i)) // OKAY
return;
System.Console.WriteLine(i);
}
} // class Program
Wygląda na to, że jestem poza zakresem dla M1 - znalezisko krawędzi? –
@ Aominè Widzę to w VS 15.2 (VS-> help-> about) ... Czego używasz? –
@PatrickArtner Oczywiście nie. Jeśli 'i' byłby poza zakresem, błąd nie powiedziałby" nieprzypisanej zmiennej lokalnej ". Ten błąd można uzyskać tylko w przypadku zmiennych znajdujących się w zakresie. – hvd