无法在System.Boolean上测试

Lei*_*and 2 c#

这个

row["active"].GetType().ToString()
Run Code Online (Sandbox Code Playgroud)

逃避

System.Boolean
Run Code Online (Sandbox Code Playgroud)

为什么这是一个错误?

if (row["active"]) { ... }
if (row["active"] == true) { ... }
Run Code Online (Sandbox Code Playgroud)

我认为System.Boolean可能是true还是false?

Pat*_*man 6

返回类型row["active"]是一个对象,它作为布尔谓词无效.返回的值实际上是一个包装的布尔值并不重要.

你知道它是一个布尔值,但编译器没有.如果row["active"]会突然返回一个字符串怎么办?比表达式无效..NET运行时在编译时提前绑定变量.它不像运行时的​​语言那样在运行时评估它们的类型.

你必须通过强制转换它告诉编译器值是一个布尔值:

if ((bool)row["active"]) { ... }
Run Code Online (Sandbox Code Playgroud)