为什么Convert.ToBoolean(“0”)失败?

时间:2010-05-17 23:47:35

标签: c#

我知道尝试将字符串“0”转换为布尔值会失败,我也知道如何解决这个问题,感谢Jon Skeets对其他问题的回答。

我想知道的是,为什么C#不会将“0”识别为布尔转换的有效输入,当然你可以把它看作0 = false,1 = true,甚至-1 = false和0 = true,无论如何,我的逻辑告诉我它可能是一个有效的输入,所以它有一个很好的理由不是吗?我的赌注是旧的vb6能够将字符串输入“0”识别为有效。

7 个答案:

答案 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.TrueStringBoolean.FalseString值的字符串。 返回值

类型:System.Boolean 如果value等于TrueString,则返回true;如果value等于FalseString或null,则返回false。 例外

答案 6 :(得分:0)

每当您将"0"作为参数时,它会将其视为字符串值。并且字符串无法转换为bool无论是0还是1都无关紧要。