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.
nulleine 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.Emptywenn es ist null.
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.
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
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 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.
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.
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 NULLWert oder nicht, behandelt .ToString()jedoch keinen NULLWert und keinen NULLReferenzausnahmefehler. 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.ToStringnicht 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: 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.
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
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)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
Die Funktion Convert.Tostring () behandelt NULL, die Methode .ToString () jedoch nicht. hier besuchen .