Was ist der Unterschied zwischen Convert.ToString()
und .ToString()
?
Ich habe online viele Unterschiede gefunden, aber was ist der Hauptunterschied?
Was ist der Unterschied zwischen Convert.ToString()
und .ToString()
?
Ich habe online viele Unterschiede gefunden, aber was ist der Hauptunterschied?
Antworten:
Convert.ToString()
Griffe null
, während ToString()
nicht.
null
eine leere Zeichenfolge zurückgeben oder eine Ausnahme auslösen? Es ist wie der Unterschied zwischen Casting und Verwendung as
: stille Konvertierung.
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.Empty
wenn es ist null.
Convert.ToString(string value)
Gibt zurück, null
wenn das Argument lautet null
. Convert.ToString(object value)
Gibt zurück, String.Empty
wenn das Argument lautet null
.
Zusätzlich zu anderen Antworten zum Umgang mit null
Werten werden Convert.ToString
Versuche IFormattable
und IConvertible
Schnittstellen 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
IConvertible
hat Vorrang vor IFormattable
, was wiederum Vorrang vor nimmt Object.ToString()
Umsetzung.
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 i
mit i.ToString ()
oder konvertieren Convert.ToString
. Was ist der Unterschied?
Der grundlegende Unterschied zwischen ihnen besteht darin, dass die Convert
Funktion NULLS verarbeitet, während i.ToString ()
dies nicht der Fall ist. Es wird ein NULL-Referenzausnahmefehler ausgegeben. So ist eine gute Codierungspraxis convert
immer sicher.
Sie können eine Klasse erstellen und die toString
Methode überschreiben , um alles zu tun, was Sie wollen.
Sie können beispielsweise eine Klasse "MyMail" erstellen und die toString
Methode zum Senden einer E-Mail überschreiben oder eine andere Operation ausführen, anstatt das aktuelle Objekt zu schreiben.
Der Convert.toString
konvertiert den angegebenen Wert in seine entsprechende Zeichenfolgendarstellung.
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.
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.
null
, ""
Oder "null"
?
In verarbeitet Convert.ToString()
die Konvertierung entweder einen NULL
Wert oder nicht, behandelt .ToString()
jedoch keinen NULL
Wert und keinen NULL
Referenzausnahmefehler. Es ist also in der guten Praxis zu verwenden Convert.ToString()
.
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)
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);
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();
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.ToString
nicht handhaben Null Exception
. es einfach tun:return value == null ? string.Empty : value.ToString()
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: Convert
Funktionshandles NULL
, während i.ToString()
dies nicht der Fall ist. NULL reference exception error.
So ist eine gute Codierungspraxis convert
immer 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.
Convert.ToString(value)
versucht zuerst, obj in IConvertible umzuwandeln , dann IFormattable , um entsprechende ToString(...)
Methoden aufzurufen . Wenn stattdessen wurde der Parameterwert null
dann 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 , null
wenn beispielsweise value.ToString()
null zurückgegeben wird.
Siehe .Net-Referenzquelle
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.
class System.Object
{
public string ToString(IFormatProvider provider)
{
return Number.FormatInt32(this, null, NumberFormatInfo.GetInstance(provider));
}
}
class System.Convert
{
public static string ToString(object value)
{
return value.ToString(CultureInfo.CurrentCulture);
}
}
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.
Convert.Tostring()
ruft im Grunde nur folgendes auf value == null ? String.Empty: value.ToString()
(string)variable
wird 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
Die Funktion Convert.Tostring () behandelt NULL, die Methode .ToString () jedoch nicht. hier besuchen .