Qual è la differenza tra Convert.ToString()
e .ToString()
?
Ho trovato molte differenze online, ma qual è la differenza principale?
Qual è la differenza tra Convert.ToString()
e .ToString()
?
Ho trovato molte differenze online, ma qual è la differenza principale?
Risposte:
Convert.ToString()
gestisce null
, mentre ToString()
non lo fa.
null
restituire una stringa vuota o generare un'eccezione? È un po 'come la differenza tra casting e utilizzo as
: conversione silenziosa.
La chiamata ToString()
a un oggetto presuppone che l'oggetto non sia nullo (poiché un oggetto deve esistere per chiamare un metodo di istanza su di esso). Convert.ToString(obj)
non è necessario presumere che l'oggetto non sia nullo (in quanto si tratta di un metodo statico sulla classe Convert), ma restituirà invece String.Empty
se è nullo.
Convert.ToString(string value)
ritorna null
se l'argomento è null
. Convert.ToString(object value)
ritorna String.Empty
se l'argomento è null
.
Oltre ad altre risposte sulla gestione dei null
valori, Convert.ToString
prova a utilizzare IFormattable
e IConvertible
interfacce prima di chiamare base Object.ToString
.
Esempio:
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();
}
}
Risultato:
Convert.ToString(new FormattableType()); // 0.42
new FormattableType().ToString(); // 0,42
IConvertible
ha la precedenza IFormattable
, che a sua volta ha la precedenza Object.ToString()
sull'implementazione.
Comprendiamo la differenza con questo esempio:
int i= 0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));
Possiamo convertire l'intero i
usando i.ToString ()
o Convert.ToString
. Quindi qual è la differenza?
La differenza fondamentale tra loro è che la Convert
funzione gestisce NULLS mentre i.ToString ()
non lo fa; genererà un errore di eccezione di riferimento NULL. Quindi, come una buona pratica di programmazione convert
è sempre sicura.
Puoi creare una classe e sovrascrivere il toString
metodo per fare tutto quello che vuoi.
Ad esempio, è possibile creare una classe "MyMail" e sovrascrivere il toString
metodo per inviare un'e-mail o eseguire altre operazioni invece di scrivere l'oggetto corrente.
Il Convert.toString
converte il valore specificato per la sua rappresentazione di stringa equivalente.
I metodi sono "sostanzialmente" uguali, tranne per la gestione di null .
Pen pen = null;
Convert.ToString(pen); // No exception thrown
pen.ToString(); // Throws NullReferenceException
Da MSDN:
metodo Convert.ToString
Converte il valore specificato nella sua rappresentazione di stringa equivalente.
Restituisce una stringa che rappresenta l'oggetto corrente.
null
, ""
O "null"
?
In Convert.ToString()
, il Convert gestisce o meno un NULL
valore ma in .ToString()
esso non gestisce un NULL
valore e un NULL
errore di eccezione di riferimento. Quindi è buona pratica usare Convert.ToString()
.
Per gli amanti del codice questa è la risposta migliore.
.............. 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)
Sono d'accordo con la risposta di @ Ryan . A proposito, a partire da C # 6.0 per questo scopo puoi usare:
someString?.ToString() ?? string.Empty;
o
$"{someString}"; // I do not recommend this approach, although this is the most concise option.
invece di
Convert.ToString(someString);
Convert.ToString(strName)
gestirà valori null-grado e strName.Tostring()
non gestirà valore null e genererà un'eccezione.
Quindi è meglio usare Convert.ToString()
quindi.ToString();
ToString() Vs Convert.ToString()
Analogie :-
Entrambi vengono utilizzati per convertire un tipo specifico in stringa, ovvero int in stringa, float in stringa o un oggetto in stringa.
Differenza: -
ToString()
non può gestire null mentre nel caso in cui Convert.ToString()
gestirà il valore null.
Esempio :
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
non gestire Null Exception
. semplicemente:return value == null ? string.Empty : value.ToString()
Per comprendere entrambi i metodi, facciamo un esempio:
int i =0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));
Qui entrambi i metodi vengono utilizzati per convertire la stringa, ma la differenza di base tra loro è: Convert
handle di funzioni NULL
, mentre i.ToString()
non genererà una NULL reference exception error.
pratica di codifica così buona usandoconvert
è sempre sicura.
Vediamo un altro esempio:
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)
prova prima a lanciare obj su IConvertible , poi su IFormattable per chiamare i ToString(...)
metodi corrispondenti . Se invece il valore del parametro fosse null
quindi restituito string.Empty
. Come ultima risorsa, tornare obj.ToString()
se nient'altro ha funzionato.
Vale la pena notare che Convert.ToString(value)
può tornare null
se, ad esempio, value.ToString()
restituisce null.
Vedere sorgente di riferimento .Net
ho scritto questo codice e compilarlo.
class Program
{
static void Main(string[] args)
{
int a = 1;
Console.WriteLine(a.ToString());
Console.WriteLine(Convert.ToString(a));
}
}
usando 'reverse engineering' ( ilspy ) scopro 'object.ToString ()' e 'Convert.ToString (obj)' fanno esattamente una cosa. infatti 'Convert.ToString (obj)' call 'object.ToString ()' so 'object.ToString ()' è più veloce.
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);
}
}
In C # se dichiari una variabile stringa e se non assegni alcun valore a quella variabile, per impostazione predefinita quella variabile assume un valore nullo. In tal caso, se si utilizza il metodo ToString (), il programma genererà l'eccezione riferimento null. D'altra parte, se si utilizza il metodo Convert.ToString (), il programma non genererà un'eccezione.
Convert.Tostring()
in pratica chiama semplicemente quanto segue value == null ? String.Empty: value.ToString()
(string)variable
servirà solo a lanciare quando v'è una implicita o esplicita operatore su quello che si sta casting
ToString()
può essere sostituito dal tipo (ha il controllo su ciò che fa), in caso contrario si traduce nel nome del tipo
Ovviamente se un oggetto è nullo , non è possibile accedere al membro dell'istanza ToString()
, causerà un'eccezione
La funzione Convert.Tostring () gestisce il valore NULL mentre il metodo .ToString () no. visita qui .