Betrachten Sie diesen Code:
%Vor% Im obigen Code s is string
, aber b ist false
.
eigentlich s als String, Warum bekomme ich dieses Ergebnis?
Warum hat der Compiler dieses Verhalten?
Bei der Auswertung Ihrer Anweisung muss die Laufzeit zuerst folgen der Referenz, auf die sich die Variable bezieht. Nur dann kann es das referenzierte Objekt auswerten, um festzustellen, ob es tatsächlich eine Zeichenfolge ist.
Da sich eine null
-Referenz auf kein Objekt bezieht, handelt es sich nicht um eine Zeichenfolge. In der Tat ist es überhaupt nichts.
Sie können den typeof
-Operator verwenden, um das Type
-Objekt zu erhalten, das string entspricht, anstatt ein referenziertes Objekt zu vergleichen, wenn dies Ihr endgültiges Ziel ist.
Dies ist tatsächlich das besondere Beispiel, das Eric Lippert in einem Blogbeitrag zu genau diesem Thema gegeben hat:
Ich habe festgestellt, dass der Operator is in C # inkonsistent ist. Sieh dir das an:
%Vor%Was ist los damit?
- Ссылка
Die Variable s
ist eine Referenz, die möglicherweise auf die Position einer Zeichenfolge im Speicher verweist, obwohl Sie sie noch nicht auf eine Zeichenfolge ausgerichtet haben - sie zeigt auf 'null'. Wenn Sie s is string
fragen, sagen Sie: "Zeigt der Verweis s
auf den Speicherort einer Zeichenfolge im Speicher", und in Ihrem Fall lautet die Antwort "nein".