我知道尝试将字符串“0”转换为布尔值会失败,我也知道如何解决这个问题,感谢Jon Skeets对其他问题的回答。
我想知道的是,为什么C#不会将“0”识别为布尔转换的有效输入,当然你可以把它看作0 = false,1 = true,甚至-1 = false和0 = true,无论如何,我的逻辑告诉我它可能是一个有效的输入,所以它有一个很好的理由不是吗?我的赌注是旧的vb6能够将字符串输入“0”识别为有效。
答案 0 :(得分:8)
简单的答案是因为这是定义方法的方式。但是,在C#中0
不评估为false
,因此如果使用转换将“0”转换为false将会令人惊讶。
答案 1 :(得分:2)
带有值的字符串将始终返回true,甚至是空字符串。
答案 2 :(得分:2)
我的猜测是因为一个C程序员转向.NET语言可能会感到困惑,因为在C中,字符“0”的直接转换将评估为“true”,而字符“\ 0”会评价为“假”。
(这是因为空字符实际 字节满了零,而'0'字符是非零ASCII / Unicode /等不是。)
答案 3 :(得分:2)
这很简单,Convert.ToBoolean(String)调用Boolean.TryParse()。只接受“真”或“假”。如果您想扩展选项,那么您可以使用具有更灵活类型系统的.NET语言。它得到了.NET框架的良好支持:
bool b = (bool)Microsoft.VisualBasic.CompilerServices.Conversions.ToBoolean("0");
添加对Microsoft.VisualBasic.dll的引用
答案 4 :(得分:1)
出于同样的原因,以下代码将无法编译。
bool value = 0;
//error CS0031: Constant value '0' cannot be converted to a 'bool'
答案 5 :(得分:0)
http://msdn.microsoft.com/en-us/library/86hw82a3.aspx
根据上面的msdn链接,此方法将逻辑值的指定字符串表示形式转换为其布尔等效项。
public static bool ToBoolean(
string value
)
参数
值 键入:System.String 包含Boolean.TrueString或Boolean.FalseString值的字符串。 返回值
类型:System.Boolean 如果value等于TrueString,则返回true;如果value等于FalseString或null,则返回false。 例外
答案 6 :(得分:0)
每当您将"0"
作为参数时,它会将其视为字符串值。并且字符串无法转换为bool无论是0
还是1
都无关紧要。