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.
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.
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.
Convert.ToString(string value)renvoie nullsi l'argument est null. Convert.ToString(object value)renvoie String.Emptysi l'argument est null.
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
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 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.
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.
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 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().
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.ToStringne 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: 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.
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
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)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
La fonction Convert.Tostring () gère la valeur NULL contrairement à la méthode .ToString (). visitez ici .