没有比较器的C#参考类型条件

时间:2018-09-02 16:06:48

标签: c# unity3d

我经常在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#几年了,所以如果众所周知,这简直不受欢迎吗?

最后一点,我查看了类定义以确保没有运算符重载,并且没有看到任何

1 个答案:

答案 0 :(得分:0)

首先,笨蛋?不是参考类型。它实际上是一个结构,这是一个值类型。这是Nullable<bool>的快捷方式。

所以您的比较会失败。

这把你甩了。