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

95
这两种方法有什么不同?
Convert.ToBoolean() 和 Boolean.Parse()?
有没有使用其中一种的原因?
此外,还有其他我应该注意的 type.Parse() 方法吗?
谢谢,
Matt
3个回答

93

Convert.ToBoolean(string)实际上仍会调用bool.Parse(),因此对于非空的string,它们在功能上没有区别(对于空的stringConvert.ToBoolean()返回false,而bool.Parse()抛出一个ArgumentNullException)。

考虑到这一事实,当您确定输入不为空时,应使用bool.Parse(),以节省进行一次null检查的时间。

当然,Convert.ToBoolean()还有许多其他重载方法,可以从许多其他内置类型生成bool,而Parse()只适用于string

在关于类型.Parse()方法的注意事项方面,所有内置数字类型都有Parse()TryParse()方法。DateTime也有这些方法,以及额外的ParseExact()/TryParseExact()方法,允许您指定日期的预期格式。


感谢提供详细信息。那么,使用Boolean.Parse(string)与不使用在性能上没有区别,或者说只有极小的收益? - brandeded
1
@mbrownnyc 如果您确定输入不是空字符串,使用Parse()可能会获得非常小的(可能无法察觉的)收益。如果您不确定,请使用ToBoolean(),因为它会为您进行检查。如果您不希望空字符串导致false,则自行执行检查,然后在不为空时调用Parse() - dlev

43

这是一个简短的演示:

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

2
Convert.ToBoolean("1"); // Format Exception - Robert McKee
Convert.ToBoolean("2"); 也会返回一个真值。我知道布尔值有时被引用为0和1,但你永远不知道有人会打错什么。 - Arne Peirs

3
Boolean.Parse()将把逻辑布尔值的字符串表示形式转换为布尔值。Convert.ToBoolean()有多个重载,可以将基本类型转换为它们的布尔等效项。
大多数(如果不是全部)C#中的基元类型都有一个关联的*.Parse/Convert.To*方法,其作用与Boolean.Parse()/Convert.ToBoolean()相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接