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?
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?
Réponses:
Convert.ToString()
poignées null
, tandis ToString()
que non.
null
renvoyer 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.
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.Empty
s'il est nul.
Convert.ToString(string value)
renvoie null
si l'argument est null
. Convert.ToString(object value)
renvoie String.Empty
si l'argument est null
.
En plus d'autres réponses sur la gestion des null
valeurs, Convert.ToString
essaie d'utiliser IFormattable
et des IConvertible
interfaces 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
IConvertible
a la priorité sur IFormattable
, qui à son tour a la priorité sur la Object.ToString()
mise en œuvre.
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 i
utilisant i.ToString ()
ou Convert.ToString
. Alors, quelle est la différence?
La différence fondamentale entre eux est que la Convert
fonction 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 convert
est toujours sûre.
Vous pouvez créer une classe et remplacer la toString
méthode pour faire tout ce que vous voulez.
Par exemple, vous pouvez créer une classe "MyMail" et remplacer la toString
méthode pour envoyer un e-mail ou effectuer une autre opération au lieu d'écrire l'objet courant.
La Convert.toString
convertit la valeur spécifiée pour la représentation de chaîne équivalente.
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.
Retourne une chaîne qui représente l'objet actuel.
null
, ""
ou "null"
?
Dans Convert.ToString()
, le Convert gère une NULL
valeur ou non, mais .ToString()
il ne gère pas une NULL
valeur et une NULL
erreur d'exception de référence. Il est donc recommandé de l'utiliser Convert.ToString()
.
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)
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);
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();
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.ToString
ne pas manipuler Null Exception
. il suffit de faire:return value == null ? string.Empty : value.ToString()
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: Convert
les 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 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.
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 null
alors 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 null
si, par exemple, value.ToString()
renvoie null.
Voir la source de référence .Net
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.
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);
}
}
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.
Convert.Tostring()
appelle simplement ce qui suit value == null ? String.Empty: value.ToString()
(string)variable
ne 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
La fonction Convert.Tostring () gère la valeur NULL contrairement à la méthode .ToString (). visitez ici .