当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《C#无法将bool强制转换为int》经验,为你挑选了4个好方法。

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



1> kemiller2002..:

当一个整数不能用于true或时,程序员更清楚false.

if (5 > 0) 更容易理解而不是 if(5)

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


我实际上不喜欢他们在C#中使用switch语句的方式.在很多情况下,跌倒是非常有用的.
@Joseph:仍然允许出现最不容易出错的情况 - 如果您没有先做任何工作,您可以通过.但是,在做了其他"工作"之后,案件就会失败,这是不容易维持的.

2> Joey..:

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

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

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

据称这种双重性质经常导致问题,并且它使代码的可读性降低(因为你必须根据上下文判断a的给定用法int是否意图为intbool).

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

Convert.ToInt32(someBool)

正如Noldorin提到的那样,或者随你自己推出

someBool ? 1 : 0

两者都清楚地表明你使用的是int(而不是a bool).



3> Noldorin..:

只是为了获取信息,Convert.ToInt32(fooBool)应该告诉你true由1和false0表示.(这是BCL中的任意表示,但不一定是使用它的内存,但是.)

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



4> tvanfosson..:

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

例如,

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

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

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

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有