У чому різниця між Convert.ToBoolean (рядок) та Boolean.Parse (рядок)?


80

У чому різниця між двома методами

Convert.ToBoolean()

і

Boolean.Parse()?

Чи є підстави користуватися тим чи іншим?

Крім того, чи існують інші type.Parse()методи, на які я повинен стежити?

Дякую,

Метт

Відповіді:


79

Convert.ToBoolean(string)насправді bool.Parse()все одно викликає , тому для ненульових strings функціональної різниці немає. (Для null strings Convert.ToBoolean()повертає false, тоді як bool.Parse()кидає ArgumentNullException.)

Враховуючи цей факт, ви повинні використовувати, bool.Parse()коли ви впевнені, що ваші дані не є нульовими, оскільки ви зберігаєте собі одну нульову перевірку.

Convert.ToBoolean()звичайно має ряд інших перевантажень, які дозволяють вам генерувати a boolз багатьох інших вбудованих типів, тоді як Parse()це stringтільки для s.

Що стосується методів type.Parse (), на які слід звернути увагу, усі вбудовані числові типи мають Parse(), а також TryParse()методи. DateTimeмає такі, а також додаткові ParseExact()/ TryParseExact()методи, які дозволяють вказати очікуваний формат дати.


Дякую за подробиці. Отже, немає різниці у продуктивності між ними, або ви можете сказати надзвичайно невеликі вигоди за допомогою Boolean.Parse (рядок)?
mbrownnyc

1
@mbrownnyc Ви отримаєте дуже незначний (ймовірно непомітний) виграш, використовуючи, Parse() якщо ви впевнені, що введення не є нульовим рядком . Якщо ви не впевнені, просто скористайтеся ToBoolean(), оскільки це зробить перевірку за вас. І якщо ви не хочете, щоб нульовий рядок привів до помилки, виконайте перевірку самостійно, а потім зателефонуйте, Parse()якщо це не нуль.
dlev

34

Ось коротка демонстрація:

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

Примітка: Існують також дві властивості boolTrueString та FalseString, але будьте обережні, оскільки bool.TrueString != "true", лишеbool.TrueString == "True"

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

2
Convert.ToBoolean("1"); // Format Exception
Роберт Маккі,

3

Boolean.Parse()перетворить рядкове представлення логічного булевого значення в булеве значення. Convert.ToBoolean()має кілька перевантажень, які перетворять примітивні типи в їх логічний еквівалент.

Більшість, якщо не всі, примітивних типів у C # мають пов'язаний метод * .Parse / Convert.To *, який служить тій самій меті, що і Boolean.Parse()/Convert.ToBoolean().

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.