这两种方法之间有什么区别
Convert.ToBoolean()
和
Boolean.Parse()
?
有什么理由使用其中一个吗?
此外,还有其他type.Parse()
方法需要我注意吗?
谢谢,
Matt
Convert.ToBoolean(string)
实际上无论如何都会调用bool.Parse()
,因此对于非空的string
s,没有函数差异。(对于空string
s,Convert.ToBoolean()
返回false
,而bool.Parse()
抛出ArgumentNullException
。(
考虑到这个事实,当您确定您的输入不是null时,您应该使用bool.Parse()
,因为您为自己保存了一个null检查。
当然,Convert.ToBoolean()
还有许多其他重载,允许您从许多其他内置类型生成bool
,而Parse()
仅适用于string
。
就类型而言。Parse((方法,所有内置的数字类型都有Parse()
和TryParse()
方法。DateTime
具有这些方法,以及其他ParseExact()
/TryParseExact()
方法,这些方法允许您指定预期的日期格式。
下面是简短的演示:
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
Boolean.Parse()
将把逻辑布尔值的字符串表示转换为布尔值。Convert.ToBoolean()
具有多个重载,这些重载将把基元类型转换为它们的布尔等价类型。
C#中的大多数(如果不是全部的话(基元类型都有一个相关的*.Parse/Convert.To*方法,其作用与Boolean.Parse()/Convert.ToBoolean()
相同。