无法在System.Boolean上进行测试

时间:2017-04-26 08:45:54

标签: c#

row["active"].GetType().ToString()

逃避

System.Boolean

为什么这是一个错误?

if (row["active"]) { ... }
if (row["active"] == true) { ... }

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

2 个答案:

答案 0 :(得分:6)

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

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

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

if ((bool)row["active"]) { ... }

答案 1 :(得分:2)

row[string]会返回object类型,而非booleanif块不会自动转换为boolean类型。

你可以这样投你自己。

if ((bool) row["active"]) { ... }