无法将int强制转换为bool

the*_*nut 48 c# int casting boolean

我面临的问题是,在我的情况下,C#无法将数字1强制转换为bool.在我的情况下(bool)intValue不起作用.我得到了InvalidCastException.我知道我可以使用,Convert.ToBoolean(...)但我只是想知道它不起作用.对此有何解释?

我的代码是

if (actualValueType.Name == "Boolean" || setValueType.Name == "Boolean")
{
   if ((bool)actualValue != (bool)setValue)
   ...
}
Run Code Online (Sandbox Code Playgroud)

Rit*_*ton 55

没有必要施放:

bool result = intValue == 1;
Run Code Online (Sandbox Code Playgroud)

来自文档:

包含bool可以更容易地编写自我记录代码

bool值为true或false

1.2.1预定义类型(C#)

  • @shadow 我想你的意思是“假是 0,真除了 0”,而不是“假是 1,真除了 0” (3认同)
  • @ 0b101010该死的小心读者!哈哈哈哈 (3认同)

Jak*_*cki 40

int并且bool不能隐式转换(例如,与C++相比).

这是语言设计者做出的一个有意识的决定,以便在条件中使用数字时保存代码免于错误.条件需要boolean明确地取值.

不可能写:

int foo = 10;

if(foo) {
  // Do something
}
Run Code Online (Sandbox Code Playgroud)

想象一下,如果开发人员想要将foo与20进行比较但是错过了一个等号:

if(foo = 20) {
  // Do something
}
Run Code Online (Sandbox Code Playgroud)

上面的代码将编译和工作 - 副作用可能不是很明显.

做了类似的改进switch:你不能从一个案件落到另一个案件 - 你需要一个明确的breakreturn.

  • @theknut - 这是因为你正在进行铸造,只能在运行时检查.编译器在编译时没有足够的信息来帮助您. (2认同)

kra*_*s88 36

bool b = Convert.ToBoolean(0);
Run Code Online (Sandbox Code Playgroud)

将0和null转换为false,将其他任何内容转换为true.