无法在C#中将0或1强制转换为布尔值

Roh*_*han 1 c# casting boolean compiler-errors

我今天早些时候正在玩类型铸造,并遇到了一些有趣的东西.C#编译器无法转换01布尔数据类型.例如:

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

将返回false(如果它能够编译).

这里似乎没有任何信息丢失,所以我的问题是,是否有一些特定的原因C#编译器不允许你这样做?

Pre*_*lot 5

因为为了使你的强制转换工作,每个 int都必须能够被转换为bool,而不仅仅是1和0.不允许所有整数被视为布尔值的决定是有目的地完成的,以消除这种类型的可能性这个限额的错误在允许的语言中占用,例如C和C++.

  • @ColeJohnson如果你想要`c!= 0`,只需输入即可.它更容易理解并指出你真正想要的东西. (3认同)
  • 如果我不得不猜?因为Eric Lippert认为3 - 3不是假的,那是我的故事而且我坚持下去. (2认同)