Quelle est la différence entre Convert.ToString()
et .ToString()
?
J'ai trouvé beaucoup de différences en ligne, mais quelle est la différence majeure?
Convert.ToString()
gère null
, alors que ToString()
ne le fait pas.
L'appel de ToString()
sur un objet suppose que l'objet n'est pas null (puisqu'un objet doit exister pour appeler une méthode d'instance sur celui-ci). Convert.ToString(obj)
n'a pas besoin de présumer que l'objet n'est pas null (puisqu'il s'agit d'une méthode statique sur la classe Convert), mais renvoie plutôt String.Empty
s'il est null.
Outre d'autres réponses sur la gestion des valeurs null
, Convert.ToString
tente d'utiliser les interfaces IFormattable
et IConvertible
avant d'appeler la 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
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 i
en utilisant i.ToString ()
ou Convert.ToString
. Alors quelle est la différence?
La différence fondamentale entre eux est que la fonction Convert
traite NULLS alors que i.ToString ()
n'en a pas; il générera une erreur d'exception de référence NULL. Donc, une bonne pratique de codage utilisant convert
est toujours sûre.
Vous pouvez créer une classe et remplacer la méthode toString
pour faire tout ce que vous voulez.
Par exemple, vous pouvez créer une classe "MyMail" et remplacer la méthode toString
pour envoyer un courrier électronique ou effectuer une autre opération au lieu d'écrire l'objet actuel.
Le Convert.toString
convertit la valeur spécifiée en sa représentation sous forme de chaîne équivalente.
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
Les méthodes sont "fondamentalement" identiques, sauf manipulant null.
Pen pen = null;
Convert.ToString(pen); // No exception thrown
pen.ToString(); // Throws NullReferenceException
De MSDN:
Méthode Convert.ToString
Convertit la valeur spécifiée en sa représentation sous forme de chaîne équivalente.
Retourne une chaîne qui représente l'objet actuel.
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)
Dans Convert.ToString()
, le convertisseur gère une valeur NULL
ou non, mais dans .ToString()
, il ne gère pas une valeur NULL
et une erreur d'exception de référence NULL
. Il est donc de bonne pratique d’utiliser Convert.ToString()
.
Je suis d’accord avec la réponse de @ Ryan . Soit dit en passant, à partir de C # 6.0, 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);
Convert.ToString(strName)
gérera les valeurs NULL et strName.Tostring()
ne gérera pas les valeurs NULL et lèvera une exception.
Donc, il vaut mieux utiliser Convert.ToString()
que .ToString();
ToString()
ne peut pas gérer les valeurs NULL et convert.ToString()
peut gérer les valeurs NULL. Par conséquent, lorsque vous souhaitez que votre système gère les valeurs NULL, utilisez convert.ToString()
.
ToString() Vs Convert.ToString()
Similitudes :-
Les deux sont utilisés pour convertir un type spécifique en chaîne i.e 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ù Convert.ToString()
gérera une 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.
}
}
}
j'ai écrit ce code et le compiler.
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 'object.ToString ()' et 'Convert.ToString (obj)' font exactement une chose. 'object.ToString ()' donc 'object.ToString ()' est plus rapide.
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);
}
}
Convert.ToString(value)
tente d’abord de convertir obj en IConvertible , puis IFormattable d’appeler les méthodes ToString(...)
correspondantes. Si, au lieu de cela, la valeur du paramètre était null
, retournez string.Empty
. En dernier recours, retournez obj.ToString()
si rien d'autre ne fonctionne.
Il est à noter que Convert.ToString(value)
can peut renvoyer null
si, par exemple, value.ToString()
renvoie null.
La fonction Convert.Tostring () gère la valeur NULL, contrairement à la méthode .ToString (). visiter ici .
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 la suivante: Convert
fonction gère NULL
, alors que i.ToString()
ne le fait pas, elle jette un NULL reference exception error.
Donc, une bonne pratique de codage utilisant convert
est 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.