Warum null String kein String-Objekt ist

8

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?

    
Shahrooz Jafari 08.07.2013, 12:43
quelle

3 Antworten

5

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?

- Ссылка

    
David Pfeffer 08.07.2013, 12:48
quelle
2

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".

    
codebox 08.07.2013 12:46
quelle
1
  

Das Schlüsselwort null ist ein Literal, das eine Nullreferenz darstellt, wobei nicht auf ein Objekt verweist.

Ссылка

s is string ist falsch, weil s nicht auf eine Instanz von string verweist - s ist null.

    
Ant P 08.07.2013 12:46
quelle

Tags und Links