代码之家  ›  专栏  ›  技术社区  ›  Svetlozar Angelov

C#不能将bool转换为int

  •  44
  • Svetlozar Angelov  · 技术社区  · 17 年前

    10 回复  |  直到 11 年前
        1
  •  26
  •   Motti    17 年前

    true 或 false .

    if (5 > 0) if(5)

        2
  •  22
  •   Community Mohan Dere    9 年前

    在C语言中,整数经常被同时用作普通数和布尔值,例如在某个数字不为零时运行的循环。这显然有其简洁代码的优点,就像nave strlen例程一样:

    const char *s;
    for (s = str; *s; ++s)
        ;
    return (s - str);
    

    据称,这种双重性质经常导致问题,并使代码可读性降低(因为您必须从上下文判断给定的用法是否 int 意在作为 或 bool ).

    Convert.ToInt32(someBool)
    

    作为 Noldorin mentioned 或者自己滚

    someBool ? 1 : 0
    

    整数 (而不是a 布尔 ).

        3
  •  17
  •   Noldorin    17 年前

    仅供参考, Convert.ToInt32(fooBool) true false

    这里的重点是,位表示对任何程序员来说都应该毫无意义。布尔值旨在用于特定目的(即标志),不应与int混合使用,否则变量的使用可能会变得相当混乱。

        4
  •  5
  •   tvanfosson    17 年前

    我认为问题不在于真/假或1/0,而在于决定让C#成为强类型语言而不是弱类型语言。强类型语言有很多好处(也有一些缺点)。其中一个好处是,它减少了由于误用(或不正确使用)表达式而导致的错误。

    例如,

    int i = 0;
    if (i = 1) {
       ...
    }
    

    选择让C#成为强类型语言,对C#程序员来说意味着这些好处。即便如此,如果他们选择的话,他们本可以引入从bool到int(并返回)的转换。我怀疑他们没有这样做是因为可能会引入上述错误。

        5
  •  4
  •   Ahad aghapour    10 年前

    我们可以使用Convert。ToInt32的定义如下:

    public static int ToInt32(bool value);
    
        6
  •  3
  •   Hardryv    17 年前

        7
  •  -1
  •   Kai    17 年前
    var n = (bool)your_int ? 1 : 0
    
        8
  •  -1
  •   Delerium    16 年前

        9
  •  -2
  •   Peter Drier    17 年前

    你在这方面说得很好。但是,它确实删除了一个快捷方式。

    使用c,可以通过代码“bBool=1-bBool”轻松完成切换。

    相反,在C#中,我需要做一个条件来检查状态,然后将其设置为相反的状态,这会给机器和我带来更多的工作。

    推荐文章