2016-03-21 8 views
-2

Ist es besser in diesem Beispiel obj.ToString() zu schreiben oder vielleicht nur obj?Console.WriteLine (obj.ToString); vs Konsole.WriteLine (Obj);

Object obj = new Object(); 
Console.WriteLine(obj.ToString()); 
// or 
Console.WriteLine(obj); 

Und was ist der wahre Unterschied? Ist es eine bessere Art der Codierung?

+3

Es ist das gleiche. In beiden Fällen heißt ".ToString" –

+0

Ja, aber die Frage ist, was ist besser zu verwenden und warum? Oder hängt es von Ihnen ab? – What

+2

Es gibt keinen Unterschied von der Verwendungssicht. Es liegt also an Ihren persönlichen \ Teameinstellungen. Der einzige Unterschied besteht darin, dass Console.WriteLine möglicherweise nichts anzeigt, wenn "obj" null ist und "obj.ToString()" mit NRE fehlschlägt. –

Antwort

1

Aufruf Console.WriteLine(obj.ToString()) und Console.WriteLine(obj) scheint das gleiche zu sein, aber Sie rufen verschiedene Methoden.

Wenn Sie Console.WriteLine(object) aufrufen, wird eine Nullprüfung durchgeführt. Wenn negativ, wird die Methode ToString() des Objekts aufgerufen.

Wenn Sie Console.WriteLine(string) aufrufen, wird eine Nullprüfung durchgeführt. Wenn negativ, wird die Zeichenfolge direkt geschrieben.

Im Allgemeinen, nur das Senden des Objekts ist in Ordnung, ignorieren, um die ToString() Methode aufzurufen. Es ist überflüssig. Wenn Sie es anrufen, stellen Sie sicher, dass Sie nicht in die null Falle fallen. Nennen Sie es wie folgt aus: obj?.ToString() oder mehr explizit mit der null:

Console.WriteLine(obj == null ? "NULL" : obj); 
1

Wenn Sie eine Object an die Console.WriteLine() übergeben, wird zuerst überprüft, ob es die IFormattable Schnittstelle implementiert. Console.WriteLine(obj.ToString()); wird die ToString direkt anrufen.


Update: (in Bezug auf den Kommentar von Rasik)

Dieses Beispiel zeigt den Unterschied in der Ausgabe der beiden Methoden. (Parameter String vs Object)

public class MyObject : IFormattable 
{ 
    public string ToString(string format, IFormatProvider formatProvider) 
    { 
     return "IFormattable"; 
    } 

    public override string ToString() 
    { 
     return "ToString"; 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var obj = new MyObject(); 

     Console.WriteLine(obj); 
     Console.WriteLine(obj.ToString()); 
     Console.ReadKey(); 
    } 
} 

Ergebnisse:

IFormattable 
ToString 
+0

Ich bezweifle, dass Console.Writeline überprüft, ob der Typ des Eingabeparameters IFormattable implementiert oder nicht? Hier ist die Signatur der Interface-API: 'IFormattable.ToString (String, IFormatProvider)' Also im Wesentlichen erfordert es auch einen IFormatProvider, aber keine der Überladungen der 'Console.WriteLine' -Funktion nimmt einen Verweis auf ein Objekt vom Typ IFormatProvider als Argument . Es ruft einfach die virtuelle, parameterlose Methode 'ToString()' auf, die in der Basisklasse "Object" definiert ist, oder eine überschriebene ToString-Methode im Typ des Objekts, das als Argumente an "Console.WriteLine" übergeben wird. – RBT

+1

Das zugrunde liegende 'Console.Out.WriteLine()' überprüft die Überprüfung. Der 'Thread.CurrentThread.CurrentCulture; 'wird im' formatProvider' _ übergeben (wenn kein anderer angegeben ist) _ –

+1

Sehr ausführliche Erklärung. Jetzt sind die Dinge glasklar. Du bekommst meine +1. – RBT

0

Als Qualitäts Katalysator hat gesagt, wenn Sie Console.WriteLine verwenden direkt mit einem String ou Objekt, Sie sind wirklich anders Überlastungen der Verwendung Methode; In diesem Fall gibt es keinen Unterschied im Verhalten.

Ich hoffe, das hilft Ihnen!

Verwandte Themen