web-dev-qa-db-fra.com

Quelle est la différence entre Convert.ToBoolean (chaîne) et Boolean.Parse (chaîne)?

Quelle est la différence entre les deux méthodes

Convert.ToBoolean()

et

Boolean.Parse()?

Y a-t-il une raison d'utiliser l'un ou l'autre?

De plus, existe-t-il d'autres méthodes type.Parse() à surveiller?

Merci,

Mat

73
mbrownnyc

Convert.ToBoolean(string) appelle en fait bool.Parse() de toute façon, donc pour les strings non nuls, il n'y a pas de différence fonctionnelle. (Pour null strings, Convert.ToBoolean() renvoie false, tandis que bool.Parse() lance un ArgumentNullException.)

Dans ce cas, vous devez utiliser bool.Parse() lorsque vous êtes certain que votre entrée n'est pas nulle, car vous vous enregistrez une seule vérification nulle.

Convert.ToBoolean() a bien sûr un certain nombre d'autres surcharges qui vous permettent de générer un bool à partir de nombreux autres types intégrés, tandis que Parse() est pour strings uniquement.

En termes de méthodes type.Parse () que vous devez rechercher, tous les types numériques intégrés ont des méthodes Parse() ainsi que TryParse(). DateTime en a, ainsi que les méthodes supplémentaires ParseExact()/TryParseExact(), qui vous permettent de spécifier un format attendu pour la date.

72
dlev

Voici la courte démo:

object ex1 = "True";
Console.WriteLine(Convert.ToBoolean(ex1)); // True
Console.WriteLine(bool.Parse(ex1.ToString())); // True

object ex2 = "true";
Console.WriteLine(Convert.ToBoolean(ex2)); // True
Console.WriteLine(bool.Parse(ex2.ToString())); // True

object ex3 = 1;
Console.WriteLine(Convert.ToBoolean(ex3)); // True
Console.WriteLine(bool.Parse(ex3.ToString())); // Unhandled Exception: System.FormatException

object ex3 = "1";
Console.WriteLine(Convert.ToBoolean(ex3)); // An unhandled exception of type 'System.FormatException' occurred
Console.WriteLine(bool.Parse(ex3.ToString())); // Unhandled Exception: System.FormatException

object ex4 = "False";
Console.WriteLine(Convert.ToBoolean(ex4)); // False
Console.WriteLine(bool.Parse(ex4.ToString())); // False

object ex5 = "false";
Console.WriteLine(Convert.ToBoolean(ex5)); // False
Console.WriteLine(bool.Parse(ex5.ToString())); // False

object ex6 = 0;
Console.WriteLine(Convert.ToBoolean(ex6)); // False
Console.WriteLine(bool.Parse(ex6.ToString())); // Unhandled Exception: System.FormatException

object ex7 = null;
Console.WriteLine(Convert.ToBoolean(ex7)); // False
Console.WriteLine(bool.Parse(ex7.ToString())); // Unhandled Exception: System.NullReferenceException

Remarque: Il existe également deux propriétés de bool TrueString et FalseString, mais soyez prudent, car bool.TrueString != "true", seulement bool.TrueString == "True"

Console.WriteLine(bool.TrueString); // True
Console.WriteLine(bool.FalseString); // False
28
Sergey Malyutin

Boolean.Parse() convertira une représentation sous forme de chaîne d'une valeur booléenne logique en une valeur booléenne. Convert.ToBoolean() a plusieurs surcharges qui convertiront les types primitifs en leur équivalent booléen.

La plupart, sinon la totalité, des types primitifs en C # ont une méthode * .Parse/Convert.To * associée qui remplit la même fonction que Boolean.Parse()/Convert.ToBoolean().

3
csano