我们都知道在C#中我们不能将bool强制转换为int。我想看看bitmask的二进制表示是什么,但我不能使用(bool& int)..我认为问题是架构设计“真实,不是任何数字!= 0”(C ++ )我想知道这种架构的好处是什么? C真/假概念有什么不好?
答案 0 :(得分:27)
当一个整数不能用于true
或false
时,程序员会更清楚。
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
滚动自己
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#中,我需要做一个条件来检查状态,然后将它设置为相反,这会给机器和我带来更多的工作。