Differenza tra Convert.ToString () e .ToString ()


158

Qual è la differenza tra Convert.ToString()e .ToString()?

Ho trovato molte differenze online, ma qual è la differenza principale?


7
Dici di avere molte differenze sul web e in seguito ti chiedi se è solo per questo motivo specifico? Cos'altro hai trovato sul web?
Ryan,

3
Convert.ToString () ha un sovraccarico che consente di utilizzare CultureInfo, mentre .ToString () non ha tale sovraccarico.
Artemix,

Risposte:


232

Convert.ToString()gestisce null, mentre ToString()non lo fa.


3
bene .. Per questo motivo specifico solo loro usano. due metodi?
TinTin,

Inoltre, semi-correlati, vedere questa risposta per maggiori dettagli: stackoverflow.com/questions/496096/...
JYelton

Maggiori informazioni sulle differenze usando JustDecompile / Reflector: kodefuguru.com/post/2011/06/14/…
Ubikuity

5
Vuoi nullrestituire una stringa vuota o generare un'eccezione? È un po 'come la differenza tra casting e utilizzo as: conversione silenziosa.
Styfle

@Ubikuity: il collegamento è interrotto
hdoghmen,

64

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.Emptyse è nullo.


var arg = Request.Params.Get ("__ EVENTARGUMENT"); string _arg = Convert.ToString (arg); _arg non si ritira String.Empty quando arg è null. perché?
vml19

2
@Nilaa potresti voler aprire un'altra domanda facendo questo, invece di commentare. La mia prima domanda è cosa fa che tornare quando arg è nullo? Il mio primo pensiero è che "arg" sia in realtà già di tipo "stringa", quindi stai chiamando il sovraccarico di Convert.ToString (...), che restituisce semplicemente ciò che gli passi. Questa discussione riguarda il sovraccarico "oggetto" del metodo.
Chris Dwyer,

4
@Roshe Sì, ho appena avuto un po 'di questo. Convert.ToString(string value)ritorna nullse l'argomento è null. Convert.ToString(object value)ritorna String.Emptyse l'argomento è null.
Tim Goodman,

22

Oltre ad altre risposte sulla gestione dei nullvalori, Convert.ToStringprova a utilizzare IFormattablee IConvertibleinterfacce 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

1
Questo dovrebbe essere aggiunto alla risposta corretta perché è un'informazione abbastanza importante.
Santhos,

2
Proprio come un supplemento - la base sulla fonte di riferimento IConvertible ha la precedenza IFormattable, che a sua volta ha la precedenza Object.ToString()sull'implementazione.
Grx70,

11

Comprendiamo la differenza con questo esempio:

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

Possiamo convertire l'intero iusando i.ToString ()o Convert.ToString. Quindi qual è la differenza?

La differenza fondamentale tra loro è che la Convertfunzione 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.


11
il tuo esempio è un po 'invalido poiché int non può mai essere nullo
MikeT

6

Puoi creare una classe e sovrascrivere il toStringmetodo per fare tutto quello che vuoi.

Ad esempio, è possibile creare una classe "MyMail" e sovrascrivere il toStringmetodo per inviare un'e-mail o eseguire altre operazioni invece di scrivere l'oggetto corrente.

Il Convert.toStringconverte il valore specificato per la sua rappresentazione di stringa equivalente.


2
Convert.ToString in realtà è un metodo sicuro che controlla null e se il valore non è null, chiama semplicemente il metodo ToString su di esso. Quindi, in ogni caso, se si dispone del metodo ToString overriden, verrà chiamato il metodo ToString overriden.
Zafar Yousafi,

E questa sicurezza nulla aiuta solo se hai a che fare con le classi. I tipi di valore non possono essere nulli e quindi possiamo tranquillamente chiamare il metodo ToString su di essi.
Zafar Yousafi,

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

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.

Object.ToString

Restituisce una stringa che rappresenta l'oggetto corrente.


"non stampa niente"? cosa non è niente? null, ""O "null"?
Weston,

3

In Convert.ToString(), il Convert gestisce o meno un NULLvalore ma in .ToString()esso non gestisce un NULLvalore e un NULLerrore di eccezione di riferimento. Quindi è buona pratica usare Convert.ToString().


3

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)

1
Sono abbastanza soddisfatto della tua risposta. Quindi +1. Grazie.
Ashok kumar,

3

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);

2

ToString()non può gestire valori null e convert.ToString()può gestire valori null, quindi quando si desidera che il sistema gestisca l'utilizzo di valori null convert.ToString().


2

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();


2
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.ToStringnon gestire Null Exception. semplicemente:return value == null ? string.Empty : value.ToString()
Fabio

0

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 è: Converthandle 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.

0

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 nullquindi restituito string.Empty. Come ultima risorsa, tornare obj.ToString()se nient'altro ha funzionato.

Vale la pena notare che Convert.ToString(value) può tornare nullse, ad esempio, value.ToString()restituisce null.

Vedere sorgente di riferimento .Net


0

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.

Metodo Object.ToString :

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

Metodo Conver.ToString :

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

0

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.


0
  • Convert.Tostring() in pratica chiama semplicemente quanto segue value == null ? String.Empty: value.ToString()

  • (string)variableservirà 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


-1

La funzione Convert.Tostring () gestisce il valore NULL mentre il metodo .ToString () no. visita qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.