Convert.ToString verhält sich für "NULL object" und "NULL string" unterschiedlich

7

Ich habe foo ( object ) und foo2 ( string ) in einer C # -Konsolenanwendung. Der Code 2 löst eine Ausnahme aus, während Code 1 einwandfrei funktioniert.

Können Sie bitte erklären, warum es sich so verhält (mit MSDN-Referenz)?

// Code 1

%Vor%

// Code 2

%Vor%     
Lijo 22.11.2012, 14:00
quelle

3 Antworten

28

Aus der Dokumentation von Convert.ToString(string) :

  

Rückgabewert
  Typ: System.String
Wert wird unverändert zurückgegeben.

So null input wird zu einem null return value führen.

Aus der Dokumentation von Convert.ToString(object) :

  

Rückgabewert
  Typ: System.String
  Die Zeichenfolgendarstellung von value oder String.Empty if value ist null.

(wobei "Nichts" hier "null" bedeutet.)

So null input wird zu einem leeren String (Nicht-Null-Referenz) Rückgabewert führen.

    
Jon Skeet 22.11.2012, 14:05
quelle
3

Weil:

Dies ist die Implementierung von Convert.ToString (Objektwert)

%Vor%

und dies ist von Convert.ToString (String-Wert)

%Vor%     
Hamlet Hakobyan 22.11.2012 14:09
quelle
-1

Von diesem Link :

Es gibt 2 Überladungen von ToString, die hier zum Einsatz kommen

%Vor%

Der C # -Compiler versucht im wesentlichen, die spezifischste Überladung auszuwählen, die mit der Eingabe arbeitet. Ein Nullwert kann in einen beliebigen Referenztyp konvertiert werden. In diesem Fall ist die Zeichenfolge spezifischer als das Objekt und wird daher als Gewinner ausgewählt.

Im Objekt null haben Sie den Typ des Ausdrucks als Objekt festgelegt. Dies bedeutet, dass es nicht länger mit der String-Überladung kompatibel ist und der Compiler die Objektüberladung auswählt, da es die einzig kompatible ist.

Die wirklich haarigen Details, wie das Binden funktioniert, werden in Abschnitt 7.4.3 der C # -Sprachspezifikation behandelt.

    
KF2 22.11.2012 14:07
quelle

Tags und Links