Différence entre Convert.ToString () et .ToString ()

158

Quelle est la différence entre Convert.ToString()et .ToString()?

J'ai trouvé de nombreuses différences en ligne, mais quelle est la différence majeure?

Étain
la source
7
Vous dites que vous avez de nombreuses différences sur le Web et plus tard vous demandez si c'est uniquement pour cette raison spécifique? Qu'avez-vous trouvé d'autre sur le Web?
Ryan
3
Convert.ToString () a une surcharge qui permet d'utiliser CultureInfo, tandis que .ToString () n'a pas une telle surcharge.
Artemix

Réponses:

232

Convert.ToString()poignées null, tandis ToString()que non.

Ryan
la source
3
bon .. Pour cette raison spécifique seulement ils utilisent. deux méthodes?
TinTin
Aussi, semi-lié, voir cette réponse pour plus de détails: stackoverflow.com/questions/496096/…
JYelton
Plus d'informations sur les différences en utilisant JustDecompile / Reflector: kodefuguru.com/post/2011/06/14/…
Ubikuity
5
Voulez-vous nullrenvoyer une chaîne vide ou lever une exception? C'est un peu comme la différence entre le casting et l'utilisation as: la conversion silencieuse.
styfle
@Ubikuity: le lien est rompu
hdoghmen
64

L'appel ToString()sur un objet suppose que l'objet n'est pas nul (puisqu'un objet doit exister pour appeler une méthode d'instance dessus). Convert.ToString(obj)n'a pas besoin de présumer que l'objet n'est pas nul (car il s'agit d'une méthode statique sur la classe Convert), mais retournera à la place String.Emptys'il est nul.

Chris Dwyer
la source
var arg = Request.Params.Get ("__ EVENTARGUMENT"); string _arg = Convert.ToString (arg); _arg ne returing pas String.Empty lorsque arg est nul. Pourquoi?
vml19
2
@Nilaa, vous voudrez peut-être ouvrir une autre question posant ceci, au lieu de commenter. Ma première question est que renvoie- t- il lorsque arg est nul? Ma première pensée est que "arg" est déjà de type "string", donc vous appelez la surcharge de Convert.ToString (...), qui renvoie simplement ce que vous lui passez. Cette discussion concerne la surcharge "objet" de la méthode.
Chris Dwyer
4
@Roshe Ouais, je viens juste d'être mordu par ça. Convert.ToString(string value)renvoie nullsi l'argument est null. Convert.ToString(object value)renvoie String.Emptysi l'argument est null.
Tim Goodman
22

En plus d'autres réponses sur la gestion des nullvaleurs, Convert.ToStringessaie d'utiliser IFormattableet des IConvertibleinterfaces avant d'appeler base Object.ToString.

Exemple:

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

Résultat:

Convert.ToString(new FormattableType()); // 0.42
new FormattableType().ToString();        // 0,42
Alexandre
la source
1
Cela devrait être ajouté à la bonne réponse car il s'agit d'une information assez importante.
Santhos
2
Tout comme un supplément - la base sur la source de référence IConvertible a la priorité sur IFormattable, qui à son tour a la priorité sur la Object.ToString()mise en œuvre.
Grx70
11

Permet de comprendre la différence via cet exemple:

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

Nous pouvons convertir l'entier en iutilisant i.ToString ()ou Convert.ToString. Alors, quelle est la différence?

La différence fondamentale entre eux est que la Convertfonction gère NULLS alors que ce i.ToString ()n'est pas le cas; il lèvera une erreur d'exception de référence NULL. Ainsi, une bonne pratique de codage convertest toujours sûre.

Swati
la source
11
votre exemple est un peu invalide car int ne peut jamais être nul
MikeT
6

Vous pouvez créer une classe et remplacer la toStringméthode pour faire tout ce que vous voulez.

Par exemple, vous pouvez créer une classe "MyMail" et remplacer la toStringméthode pour envoyer un e-mail ou effectuer une autre opération au lieu d'écrire l'objet courant.

La Convert.toStringconvertit la valeur spécifiée pour la représentation de chaîne équivalente.

João Costa
la source
2
Convert.ToString est en fait une méthode sûre qui vérifie la valeur null et si la valeur n'est pas nulle, elle appelle simplement la méthode ToString dessus. Donc, dans tous les cas, si vous avez remplacé la méthode ToString, votre méthode ToString remplacée sera appelée.
ZafarYousafi
Et cette sécurité nulle n'aide que si vous avez affaire à des classes. Les types de valeur ne peuvent pas être null et nous pouvons donc appeler en toute sécurité la méthode ToString sur eux.
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
sudeep
la source
4

Les méthodes sont "fondamentalement" les mêmes, sauf pour la gestion de null .

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

À partir de MSDN:
méthode Convert.ToString

Convertit la valeur spécifiée en sa représentation sous forme de chaîne équivalente.

Object.ToString

Retourne une chaîne qui représente l'objet actuel.

hdoghmen
la source
"n'imprime rien"? qu'est-ce que rien? null, ""ou "null"?
weston
3

Dans Convert.ToString(), le Convert gère une NULLvaleur ou non, mais .ToString()il ne gère pas une NULLvaleur et une NULLerreur d'exception de référence. Il est donc recommandé de l'utiliser Convert.ToString().

Ajay Saini
la source
3

Pour les amateurs de code, c'est la meilleure réponse.

    .............. 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)
Abdul Saboor
la source
1
Je suis assez satisfait de votre réponse. D'où +1. Je vous remercie.
Ashok kumar
3

Je suis d'accord avec la réponse de @ Ryan . En passant, à partir de C # 6.0 à cette fin, vous pouvez utiliser:

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

ou

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

au lieu de

Convert.ToString(someString);
AlexMelw
la source
2

ToString()ne peut pas gérer les valeurs nulles et convert.ToString()peut gérer les valeurs nulles, donc lorsque vous souhaitez que votre système gère la valeur nulle, utilisez convert.ToString().

Viplov
la source
2

Convert.ToString(strName)gérera les valeurs nulles et strName.Tostring()ne gérera pas la valeur nulle et lèvera une exception.

Il vaut donc mieux utiliser Convert.ToString()alors.ToString();

Gaurang Dhandhukiya
la source
2
ToString() Vs Convert.ToString()

Similitudes :-

Les deux sont utilisés pour convertir un type spécifique en chaîne, c'est-à-dire int en chaîne, float en chaîne ou un objet en chaîne.

Différence :-

ToString()ne peut pas gérer null alors que dans le cas où avec Convert.ToString()gérera la valeur null.

Exemple :

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.
        }
    }
}
Johnny
la source
Convert.ToStringne pas manipuler Null Exception. il suffit de faire:return value == null ? string.Empty : value.ToString()
Fabio
0

Pour comprendre les deux méthodes, prenons un exemple:

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

Ici, les deux méthodes sont utilisées pour convertir la chaîne, mais la différence fondamentale entre elles est: Convertles poignées de fonction NULL, alors que ce i.ToString()n'est pas le cas, elle lancera un NULL reference exception error.So car une bonne pratique de codage convertest toujours sûre.

Voyons un autre exemple:

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.
Yogesh Patel
la source
0

Convert.ToString(value)essaie d'abord de convertir obj en IConvertible , puis IFormattable pour appeler les ToString(...)méthodes correspondantes . Si à la place la valeur du paramètre était nullalors return string.Empty. En dernier recours, revenez obj.ToString()si rien d'autre n'a fonctionné.

Il est à noter que cela Convert.ToString(value) peut retourner nullsi, par exemple, value.ToString()renvoie null.

Voir la source de référence .Net

Konstantin Spirin
la source
0

j'ai écrit ce code et je l'ai compilé.

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

en utilisant le 'reverse engineering' ( ilspy ), je découvre que 'object.ToString ()' et 'Convert.ToString (obj)' font exactement une chose. en fait 'Convert.ToString (obj)' appelle 'object.ToString ()' donc 'object.ToString ()' est plus rapide.

Object.ToString, méthode :

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

Méthode Conver.ToString :

class System.Convert
{
    public static string ToString(object value)
    {
        return value.ToString(CultureInfo.CurrentCulture);
    }
}
Vecteur senior
la source
0

En C #, si vous déclarez une variable chaîne et si vous n'affectez aucune valeur à cette variable, alors par défaut, cette variable prend une valeur nulle. Dans un tel cas, si vous utilisez la méthode ToString (), votre programme lèvera l'exception de référence nulle. D'autre part, si vous utilisez la méthode Convert.ToString (), votre programme ne lèvera pas d'exception.

Déroute Pranaya
la source
0
  • Convert.Tostring() appelle simplement ce qui suit value == null ? String.Empty: value.ToString()

  • (string)variablene sera casté que lorsqu'il y a un opérateur implicite ou explicite sur ce que vous lancez

  • ToString()peut être remplacé par le type (il a le contrôle sur ce qu'il fait), sinon il en résulte le nom du type

Évidemment, si un objet est nul , vous ne pouvez pas accéder au membre de l'instance ToString(), cela provoquera une exception

Le général
la source
-1

La fonction Convert.Tostring () gère la valeur NULL contrairement à la méthode .ToString (). visitez ici .

user632299
la source