我正在做这个布尔检查,但它不起作用,我真的不知道为什么。
我有一个变量:dynamic value;
假设这个变量的类型是BuiltInClass
。现在我正在做这个检查:
if (value is not BuiltInClass || value is not ClassValue)
{
// Execute code
}
但是这个代码仍然执行。谁能解释一下吗?
您误解了布尔表达式。
假设value
是类型BuiltInClass
:
然后
value is not BuiltInClass
将为falsevalue is not ClassValue
将为真
因此
value is not BuiltInClass || value is not ClassValue
解析为
false || true => true
你"固定的";这是通过使用if (!(value is BuiltInClass || value is ClassValue))
来实现的,但这与您的原始代码不等价!
它相当于:
if (value is not BuiltInClass && value is not ClassValue)
请注意使用&&
而不是||
。
有关布尔变换的更多信息,请参阅德摩根定律。
特别要注意的是转换:
not (A or B) = (not A) and (not B)
您的修复是not (A or B)
,但根据德摩根定律,您可以通过将其更改为(not A) and (not B)
来修复它。
由于注释部分,我找到了解决方案。所以我换了if (value is not BuiltInClass || value is not ClassValue)
到CCD_ 13,现在它工作了。