这两种方法有什么不同?
Convert.ToBoolean() 和 Boolean.Parse()?
有没有使用其中一种的原因?
此外,还有其他我应该注意的 type.Parse() 方法吗?
谢谢,
Matt
Convert.ToBoolean() 和 Boolean.Parse()?
有没有使用其中一种的原因?
此外,还有其他我应该注意的 type.Parse() 方法吗?
谢谢,
Matt
Convert.ToBoolean(string)
实际上仍会调用bool.Parse()
,因此对于非空的string
,它们在功能上没有区别(对于空的string
,Convert.ToBoolean()
返回false
,而bool.Parse()
抛出一个ArgumentNullException
)。
考虑到这一事实,当您确定输入不为空时,应使用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
Convert.ToBoolean("1"); // Format Exception
- Robert McKeeConvert.ToBoolean("2");
也会返回一个真值。我知道布尔值有时被引用为0和1,但你永远不知道有人会打错什么。 - Arne PeirsBoolean.Parse()
将把逻辑布尔值的字符串表示形式转换为布尔值。Convert.ToBoolean()
有多个重载,可以将基本类型转换为它们的布尔等效项。Boolean.Parse()/Convert.ToBoolean()
相同。
Parse()
可能会获得非常小的(可能无法察觉的)收益。如果您不确定,请使用ToBoolean()
,因为它会为您进行检查。如果您不希望空字符串导致false,则自行执行检查,然后在不为空时调用Parse()
。 - dlev