我经常在javascript中看到iffy / falsy语句
if (someUnknownType) {
// will check null | undefined | 0 | false | ''
}
但是我今天第一次在C#中遇到了这个问题,但我似乎找不到能够搜索到的正确单词。
_existingInstance = getTheInstanceOrNull();
if (_existingInstance)
DoSomeThings();
我认为这很奇怪,因为它没有明确说出existingInstance != null
,所以我决定测试一下几件事
if (null)
DoSomeThings();
// Err: Cannot convert null to 'bool' because it is non-nullable
我仔细检查了该方法的返回类型,并最终测试了下一个
MyType instance = null;
if (instance)
DoSomeThings(); // Roslyn says it's okay
我怀疑这会过去,因为这是我怀疑的根源。然后,我继续测试最后一个场景
bool? doNotPass = null;
if (doNotPass)
DoSomeThings();
// Err: Cannot implicitly convert 'bool?' to 'bool'
在条件条件下未针对比较器显式检查引用类型时,究竟要检查什么?
我已经使用C#几年了,所以如果众所周知,这简直不受欢迎吗?
最后一点,我查看了类定义以确保没有运算符重载,并且没有看到任何
答案 0 :(得分:0)
首先,笨蛋?不是参考类型。它实际上是一个结构,这是一个值类型。这是Nullable<bool>
的快捷方式。
所以您的比较会失败。
这把你甩了。