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?


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.


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.


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

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.


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.


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

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.


"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().


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)

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

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


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


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.
        }
    }
}

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.

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


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

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.


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


-1

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.