Unterschied zwischen Convert.ToString () und .ToString ()


158

Was ist der Unterschied zwischen Convert.ToString()und .ToString()?

Ich habe online viele Unterschiede gefunden, aber was ist der Hauptunterschied?


7
Sie sagen, Sie haben viele Unterschiede im Web und später fragen Sie, ob dies nur aus diesem speziellen Grund geschieht? Was haben Sie sonst noch im Web gefunden?
Ryan

3
Convert.ToString () hat eine Überladung, die die Verwendung von CultureInfo ermöglicht, während .ToString () keine solche Überladung aufweist.
Artemix

Antworten:


232

Convert.ToString()Griffe null, während ToString()nicht.


3
gut .. Aus diesem speziellen Grund nur sie verwenden. zwei Methoden?
TinTin


Weitere Informationen zu den Unterschieden mit JustDecompile / Reflector: kodefuguru.com/post/2011/06/14/…
Ubikuity

5
Möchten Sie nulleine leere Zeichenfolge zurückgeben oder eine Ausnahme auslösen? Es ist wie der Unterschied zwischen Casting und Verwendung as: stille Konvertierung.
Styfle

@Ubikuity: Die Verbindung ist unterbrochen
hdoghmen

64

Das Aufrufen ToString()eines Objekts setzt voraus, dass das Objekt nicht null ist (da ein Objekt vorhanden sein muss, um eine Instanzmethode darauf aufzurufen). Convert.ToString(obj)das Objekt nicht vermuten müssen , ist nicht null (wie es eine statische Methode auf der Convert - Klasse ist), sondern wird wieder , String.Emptywenn es ist null.


var arg = Request.Params.Get ("__ EVENTARGUMENT"); string _arg = Convert.ToString (arg); _arg setzt String.Empty nicht zurück, wenn arg null ist. Warum?
vml19

2
@Nilaa Vielleicht möchten Sie eine andere Frage öffnen, die dies stellt, anstatt einen Kommentar abzugeben. Meine erste Frage ist , was ist es zurück , wenn arg null ist? Mein erster Gedanke ist, dass "arg" tatsächlich bereits vom Typ "string" ist. Sie rufen also die Überladung von Convert.ToString (...) auf, die nur das zurückgibt, was Sie an sie übergeben. Diese Diskussion bezieht sich auf die "Objekt" -Überladung der Methode.
Chris Dwyer

4
@Roshe Ja, ich habe gerade etwas davon bekommen. Convert.ToString(string value)Gibt zurück, nullwenn das Argument lautet null. Convert.ToString(object value)Gibt zurück, String.Emptywenn das Argument lautet null.
Tim Goodman

22

Zusätzlich zu anderen Antworten zum Umgang mit nullWerten werden Convert.ToStringVersuche IFormattableund IConvertibleSchnittstellen vor dem Aufruf von base ausgeführt Object.ToString.

Beispiel:

class FormattableType : IFormattable
{
    private double value = 0.42;

    public string ToString(string format, IFormatProvider formatProvider)
    {
        if (formatProvider == null)
        {
            // ... using some IOC-containers
            // ... or using CultureInfo.CurrentCulture / Thread.CurrentThread.CurrentCulture
            formatProvider = CultureInfo.InvariantCulture;
        }

        // ... doing things with format
        return value.ToString(formatProvider);
    }

    public override string ToString()
    {
        return value.ToString();
    }
}

Ergebnis:

Convert.ToString(new FormattableType()); // 0.42
new FormattableType().ToString();        // 0,42

1
Dies sollte zur richtigen Antwort hinzugefügt werden, da es sich um sehr wichtige Informationen handelt.
Santhos

2
Nur als Ergänzung - auf stützen Referenzquelle IConvertible hat Vorrang vor IFormattable, was wiederum Vorrang vor nimmt Object.ToString()Umsetzung.
Grx70

11

Lassen Sie uns den Unterschied anhand dieses Beispiels verstehen:

int i= 0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));

Wir können die ganze Zahl imit i.ToString ()oder konvertieren Convert.ToString. Was ist der Unterschied?

Der grundlegende Unterschied zwischen ihnen besteht darin, dass die ConvertFunktion NULLS verarbeitet, während i.ToString ()dies nicht der Fall ist. Es wird ein NULL-Referenzausnahmefehler ausgegeben. So ist eine gute Codierungspraxis convertimmer sicher.


11
Ihr Beispiel ist ein wenig ungültig, da int niemals null sein kann
MikeT

6

Sie können eine Klasse erstellen und die toStringMethode überschreiben , um alles zu tun, was Sie wollen.

Sie können beispielsweise eine Klasse "MyMail" erstellen und die toStringMethode zum Senden einer E-Mail überschreiben oder eine andere Operation ausführen, anstatt das aktuelle Objekt zu schreiben.

Der Convert.toStringkonvertiert den angegebenen Wert in seine entsprechende Zeichenfolgendarstellung.


2
Convert.ToString ist eigentlich eine sichere Methode, die nach null sucht. Wenn der Wert nicht null ist, wird einfach die ToString-Methode aufgerufen. Wenn Sie also die ToString-Methode überschrieben haben, wird Ihre ToString-Methode überschrieben.
ZafarYousafi

Und diese Nullsicherheit hilft nur, wenn Sie mit Klassen zu tun haben. Werttypen dürfen nicht null sein, sodass wir die ToString-Methode sicher aufrufen können.
ZafarYousafi

5
object o=null;
string s;
s=o.toString();
//returns a null reference exception for string  s.

string str=convert.tostring(o);
//returns an empty string for string str and does not throw an exception.,it's 
//better to use convert.tostring() for good coding

4

Die Methoden sind "im Grunde" gleich, außer dass sie mit null umgehen .

Pen pen = null; 
Convert.ToString(pen); // No exception thrown
pen.ToString(); // Throws NullReferenceException

Von MSDN:
Convert.ToString-Methode

Konvertiert den angegebenen Wert in die entsprechende Zeichenfolgendarstellung.

Object.ToString

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.


"druckt nichts"? was ist nichts null, ""Oder "null"?
Weston

3

In verarbeitet Convert.ToString()die Konvertierung entweder einen NULLWert oder nicht, behandelt .ToString()jedoch keinen NULLWert und keinen NULLReferenzausnahmefehler. Es ist also in der guten Praxis zu verwenden Convert.ToString().


3

Für Code-Liebhaber ist dies die beste Antwort.

    .............. Un Safe code ...................................
    Try
        ' In this code we will get  "Object reference not set to an instance of an object." exception
        Dim a As Object
        a = Nothing
        a.ToString()
    Catch ex As NullReferenceException
        Response.Write(ex.Message)
    End Try


    '............... it is a safe code..............................
    Dim b As Object
    b = Nothing
    Convert.ToString(b)

1
Ich bin ziemlich zufrieden mit Ihrer Antwort. Daher +1. Danke dir.
Ashok Kumar

3

Ich stimme der Antwort von @ Ryan zu . Übrigens, beginnend mit C # 6.0 für diesen Zweck können Sie Folgendes verwenden:

someString?.ToString() ?? string.Empty;

oder

$"{someString}"; // I do not recommend this approach, although this is the most concise option.

anstatt

Convert.ToString(someString);

2

ToString()kann keine Nullwerte verarbeiten und convert.ToString()kann Werte verarbeiten, die null sind. Wenn Sie also möchten, dass Ihr System die Verwendung von Nullwerten verarbeitet convert.ToString().


2

Convert.ToString(strName)behandelt nullfähige Werte und behandelt strName.Tostring()keinen nullwert und löst eine Ausnahme aus.

Also ist es besser, Convert.ToString()dann zu verwenden.ToString();


2
ToString() Vs Convert.ToString()

Ähnlichkeiten :-

Beide werden verwendet, um einen bestimmten Typ in einen String zu konvertieren, dh int in string, float in string oder ein Objekt in string.

Unterschied: -

ToString()kann nicht mit null umgehen, während in dem Fall mit Convert.ToString()null Wert behandelt wird.

Beispiel:

namespace Marcus
{
    class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    class Startup
    {
        public static void Main()
        {
            Employee e = new Employee();
            e = null;

            string s = e.ToString(); // This will throw an null exception
            s = Convert.ToString(e); // This will throw null exception but it will be automatically handled by Convert.ToString() and exception will not be shown on command window.
        }
    }
}

Convert.ToStringnicht handhaben Null Exception. es einfach tun:return value == null ? string.Empty : value.ToString()
Fabio

0

Um beide Methoden zu verstehen, nehmen wir ein Beispiel:

int i =0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i)); 

Hier werden beide Methoden verwendet, um die Zeichenfolge zu konvertieren, aber der grundlegende Unterschied zwischen ihnen ist: ConvertFunktionshandles NULL, während i.ToString()dies nicht der Fall ist. NULL reference exception error.So ist eine gute Codierungspraxis convertimmer sicher.

Sehen wir uns ein anderes Beispiel an:

string s;
object o = null;
s = o.ToString(); 
//returns a null reference exception for s. 

string s;
object o = null;
s = Convert.ToString(o); 
//returns an empty string for s and does not throw an exception.

0

Convert.ToString(value)versucht zuerst, obj in IConvertible umzuwandeln , dann IFormattable , um entsprechende ToString(...)Methoden aufzurufen . Wenn stattdessen wurde der Parameterwert nulldann zurück string.Empty. Als letztes Mittel kehren Sie zurück, obj.ToString()wenn nichts anderes funktioniert hat.

Es ist erwähnenswert, dass zurückgegeben werden Convert.ToString(value) kann , nullwenn beispielsweise value.ToString()null zurückgegeben wird.

Siehe .Net-Referenzquelle


0

Ich habe diesen Code geschrieben und kompiliert.

class Program
{
    static void Main(string[] args)
    {
        int a = 1;
        Console.WriteLine(a.ToString());
        Console.WriteLine(Convert.ToString(a));
    }
}

Mit 'Reverse Engineering' ( ilspy ) finde ich heraus, dass 'object.ToString ()' und 'Convert.ToString (obj)' genau eines tun. infact 'Convert.ToString (obj)' call 'object.ToString ()' also 'object.ToString ()' ist schneller.

Object.ToString-Methode :

class System.Object
{
    public string ToString(IFormatProvider provider)
    {
        return Number.FormatInt32(this, null, NumberFormatInfo.GetInstance(provider));
    }
}

Conver.ToString-Methode :

class System.Convert
{
    public static string ToString(object value)
    {
        return value.ToString(CultureInfo.CurrentCulture);
    }
}

0

Wenn Sie in C # eine Zeichenfolgenvariable deklarieren und dieser Variablen keinen Wert zuweisen, nimmt diese Variable standardmäßig einen Nullwert an. Wenn Sie in einem solchen Fall die ToString () -Methode verwenden, löst Ihr Programm die Nullreferenzausnahme aus. Wenn Sie dagegen die Convert.ToString () -Methode verwenden, löst Ihr Programm keine Ausnahme aus.


0
  • Convert.Tostring() ruft im Grunde nur folgendes auf value == null ? String.Empty: value.ToString()

  • (string)variablewird nur gewirkt, wenn es einen impliziten oder expliziten Operator für das gibt, was Sie gießen

  • ToString()kann durch den Typ überschrieben werden (er hat die Kontrolle darüber, was er tut), wenn nicht, ergibt sich der Name des Typs

Wenn ein Objekt null ist und Sie nicht auf das Instanzmitglied zugreifen können ToString(), führt dies natürlich zu einer Ausnahme


-1

Die Funktion Convert.Tostring () behandelt NULL, die Methode .ToString () jedoch nicht. hier besuchen .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.