Convert.ToBoolean(string)和Boolean.Parse(string)有什么区别?


80

两种方法有什么区别

Convert.ToBoolean()

Boolean.Parse()

有任何理由使用其中之一吗?

另外,type.Parse()我还有其他方法要注意吗?

谢谢,

马特

Answers:


78

Convert.ToBoolean(string)bool.Parse()无论如何实际上都会调用,因此对于非null string,没有功能上的区别。(对于null stringConvert.ToBoolean()返回false,而bool.Parse()抛出ArgumentNullException。)

鉴于这一事实,您应该bool.Parse()在确定输入不为null时使用,因为您可以为自己保存一个null检查。

Convert.ToBoolean()当然,还有许多其他重载,它们允许您bool从许多其他内置类型生成a ,而Parse()仅用于strings。

在type.Parse方面()方法,你应该去寻找,所有的内置数值类型有Parse()TryParse()方法。DateTime具有这些以及其他ParseExact()/TryParseExact()方法,可让您指定日期的期望格式。


感谢您的详细信息。因此,两者之间的性能没有差异,或者您可以通过使用Boolean.Parse(string)来说获得非常小的增益?
mbrownnyc 2011年

1
@mbrownnycParse() 如果您确定输入不是null字符串,则将获得很小的收益(可能难以察觉)。如果不确定,请使用ToBoolean(),因为它将为您进行检查。而且,如果您不希望null字符串导致false,请自己执行检查,Parse()如果不为null ,则调用。
dlev 2011年

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()

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.