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

Posted

技术标签:

【中文标题】Convert.ToBoolean(string) 和 Boolean.Parse(string) 有啥区别?【英文标题】:What is the difference between Convert.ToBoolean(string) and Boolean.Parse(string)?Convert.ToBoolean(string) 和 Boolean.Parse(string) 有什么区别? 【发布时间】:2011-10-25 07:23:44 【问题描述】:

这两种方法有什么区别

Convert.ToBoolean()

Boolean.Parse()?

有什么理由使用其中一个吗?

此外,还有其他我应该注意的type.Parse() 方法吗?

谢谢,

马特

【问题讨论】:

【参考方案1】:

这是一个简短的演示:

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

注意:bool也有TrueString和FalseString两个属性,但是要小心,因为bool.TrueString != "true",只有bool.TrueString == "True"

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

【讨论】:

Convert.ToBoolean("1"); // Format Exception Convert.ToBoolean("2"); 也会返回一个真实值。我知道布尔值有时被称为 0 和 1,但你永远不知道有人打错了什么。【参考方案2】:

Boolean.Parse() 会将逻辑布尔值的字符串表示形式转换为布尔值。 Convert.ToBoolean() 有多个 overloads,它们会将原始类型转换为其等效的布尔值。

C# 中的大多数(如果不是全部)原始类型都有一个关联的 *.Parse/Convert.To* 方法,其用途与 Boolean.Parse()/Convert.ToBoolean() 相同。

【讨论】:

【参考方案3】:

Convert.ToBoolean(string) 无论如何实际上调用了bool.Parse(),所以对于非空strings,没有功能上的区别。 (对于 null strings,Convert.ToBoolean() 返回 false,而 bool.Parse() 抛出 ArgumentNullException。)

鉴于这一事实,当您确定您的输入不为空时,您应该使用bool.Parse(),因为您为自己节省了一次空检查。

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

就您应该注意的 type.Parse() 方法而言,所有内置数字类型都有 Parse()TryParse() 方法。 DateTime 具有这些以及其他 ParseExact()/TryParseExact() 方法,它们允许您指定预期的日期格式。

【讨论】:

感谢您提供详细信息。所以,两者在性能上没有区别,或者你可以说使用 Boolean.Parse(string) 的收益非常小? @mbrownnyc 如果您确定输入不是空字符串,则使用Parse() 会获得非常小的(可能难以察觉)的收益。如果您不确定,只需使用ToBoolean(),因为它会为您进行检查。如果你不希望空字符串导致错误,那么自己进行检查,如果它不为空,则调用Parse()

以上是关于Convert.ToBoolean(string) 和 Boolean.Parse(string) 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

csharp Convert.ToBoolean

C#表达式Convert.ToBoolean(-2)的值是?

C# 能把字符串转换成bool 类型吗?

C# & 运算符说明

关于System.Convert那些事

怎么把一个string类型转换为bool类型