代码之家  ›  专栏  ›  技术社区  ›  JL. Hans Passant

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

c#
  •  6
  • JL. Hans Passant  · 技术社区  · 15 年前

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

    我想知道的是,为什么C#不承认“0”是布尔转换的有效输入,当然你可以把它看作0=false,1=true,甚至-1=false和0=true,不管怎样,我的逻辑告诉我,它可能是一个有效输入,那么有没有一个很好的理由说明它不是?我打赌旧的vb6将能够识别字符串输入“0”为有效。

    7 回复  |  直到 15 年前
        1
  •  7
  •   Lee    15 年前

    答案很简单,因为这就是方法的定义方式。但是,在C中# 0 不计算为 false ,因此,如果使用Convert将“0”转换为false,这将是令人惊讶的。

        2
  •  3
  •   Dave Markle    15 年前

    我的猜测是,这是因为C程序员来到.NET语言可能会感到困惑,因为在C中,字符“0”的直接转换将计算为“true”,而字符“\0”将计算为“false”。

    (这是因为空字符实际上 字节中充满了零,'0'字符是非零ASCII/Unicode/etc不是。)

        3
  •  2
  •   Martin Ongtangco    15 年前

        4
  •  2
  •   Hans Passant    15 年前

    很简单,Convert.ToBoolean(String)调用Boolean.TryParse()。只接受“真”或“假”。如果你想拓宽选项,那么你可以,有一个更灵活的类型系统.NET语言。它得到了.NET framework的良好支持:

     bool b = (bool)Microsoft.VisualBasic.CompilerServices.Conversions.ToBoolean("0");
    

    添加对Microsoft.VisualBasic.dll的引用

        5
  •  1
  •   Igor Zevaka    15 年前

    bool value = 0;
    //error CS0031: Constant value '0' cannot be converted to a 'bool'
    
        6
  •  0
  •   Amr Badawy    15 年前

    http://msdn.microsoft.com/en-us/library/86hw82a3.aspx
    根据上面的msdn-link,此方法将逻辑值的指定字符串表示形式转换为其布尔等价形式。

    public static bool ToBoolean(
        string value
    )
    

    参数

    价值 类型:System.String Boolean.TrueString Boolean.FalseString . 返回值

    如果值等于TrueString,则为true;如果值等于FalseString或null,则为false。 例外情况

        7
  •  0
  •   Johnny    15 年前

    无论何时你给予 "0" 0 1 .