C#无法将bool强制转换为int

时间:2009-06-03 19:31:59

标签: c# .net

我们都知道在C#中我们不能将bool强制转换为int。我想看看bitmask的二进制表示是什么,但我不能使用(bool& int)..我认为问题是架构设计“真实,不是任何数字!= 0”(C ++ )我想知道这种架构的好处是什么? C真/假概念有什么不好?

9 个答案:

答案 0 :(得分:27)

当一个整数不能用于truefalse时,程序员会更清楚。

if (5 > 0)if(5)

更容易理解

这也是他们不允许在switch语句中出现条件的原因。犯错很容易。

答案 1 :(得分:22)

在C中,整数经常被双倍地用作正常数和布尔值,例如在某个数字不为零时运行的循环。这是一个明显具有简洁代码优点的用途,就像一个天真的strlen例程:

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

但是虽然很短,但它掩盖了该片段的真正目的,它基本上表示“循环,而我正在看的角色不是空字符”。但是写下来只是说“当我感觉它时将其视为布尔值,并在其他情况下将其视为一个数字”。

这种双重性质据称经常导致问题,并且使代码的可读性降低(因为您必须根据上下文判断int的给定用法是否为int或{ {1}})。

如果你绝对需要使用布尔值作为整数,你可以使用

bool

Noldorin mentioned或使用

滚动自己
Convert.ToInt32(someBool)

两者都清楚地表明您使用的是someBool ? 1 : 0 (而不是int)。

答案 2 :(得分:17)

仅供参考,Convert.ToInt32(fooBool)应该告诉您true由1表示,false由0表示。(这是BCL中的任意表示,不一定是一个然而,用它来记忆。)

这里的要点是,对于任何程序员来说,位表示确实应该没有意义。布尔值用于特定目的(即标志),不应与int混合使用,否则变量的使用可能会变得非常混乱。

答案 3 :(得分:5)

我认为问题不是关于真/假或1/0的问题,因为关于决定使C#成为强类型语言而不是弱类型语言。对于强类型语言有许多好处(和一些缺点)。其中一个好处是它可以减少因滥用(或错误使用)表达而导致的错误。

例如,

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

甚至不会在C#中编译,但它会在C中编译和执行不正确。

选择使C#成为一种强类型语言,可以为C#程序员带来这些好处。即便如此,如果他们愿意,他们也可以引入从bool到int(和back)的转换。我怀疑他们没有这样做,因为可能会引入上述错误。

答案 4 :(得分:4)

我们可以使用Convert.ToInt32,它的定义在这里:

public static int ToInt32(bool value);

答案 5 :(得分:3)

没有人喜欢所有其他实体的决定......只需编写自己的转换器(快速 - 和 - 类似)

答案 6 :(得分:-1)

int n =(bBool)? 1:0

答案 7 :(得分:-2)

数字!= 0,太容易出错。

C#做出了很多设计决定,以颠覆这样可能导致的常见错误。

答案 8 :(得分:-2)

你对这些有所了解。但它确实删除了一个快捷方式。

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

如果bBool为真(1),则1 - 1 = 0. bBool变为false。

如果bBool为false(0),则1 - 0 = 1.bBool变为true。

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