Ich habe den folgenden Code:Warum kann C# prüfen, ob ein 'var' null ist?
List<IMessage> messageList = new List<IMessage>();
foreach(var msg in messageList)
{
if(msg != null)
{
}
}
Wie ist es möglich, die var
msg gegen null
zu überprüfen? Was sagt der Compiler, dass var
ist ein IMessage
und nicht ein int
oder ein anderer Typ, der nicht nullfähig ist?
Wenn Sie das Beispiel über MSDN betrachten, geben sie den implizit typisierten Variablen Anfangswerte (wodurch die Deklaration explizit wird). In meinem Fall gebe ich nicht einmal einen Wert, aber der Compiler hat kein Problem damit. Woher weiß der Compiler, dass die msg
Nullable ist?
Ihre 'messageList' ist eine Liste von Elementen vom Typ' IMessage', so dass der Compiler leicht darauf schließen kann, dass der eigentliche Typ von 'msg'' IMessage' ist. Wenn der Compiler den Typ nicht ableiten könnte, wäre es nicht möglich, 'var' zu verwenden - z. 'var msg;' wäre nicht erlaubt. – stuartd
Nebenbei ist der Vergleich eines Wertes gegen "Null" immer zulässig. Der Compiler würde einfach eine Warnung ausgeben, wenn 'msg' ein 'int' wäre, da der Vergleich immer 'wahr' ist, aber nicht erlaubt wäre. –
@JeroenMostert Wenn ich 'null' für einen Werttyp überprüfe, erhalte ich mehr als eine Warnung. Nicht sicher, was du sagst. – Snoopy