C# 6 方法失败的空条件运算符

C# 6 Null Conditional Operator for Method Fails

以下 (C# Interactive) 编译但爆炸了。不确定我错过了什么...

class Test { public Func<object> GetSomething = null; }
var t = new Test();
var result = t?.GetSomething();

当然有!

根据您的代码,t 不是 null,因此 ?. 是多余的。

但是 t.GetSomething 不是。这就是抛出 NullReferenceException.

的原因

你要找的是这个:

var result = t.GetSomething?.Invoke();

要了解新的 C# 6 功能是如何实现的,请查看 my article

我认为您误解了该运算符的工作方式。

var result = t?.GetSomething();

此处 t?. 表示“如果 t 为空,就在此处停止,return 为空;否则,取消引用 t 并检索成员 GetSomething

现在,您没有检查 GetSomething 上的任何内容。相反,你可以这样做:

var result = t?.GetSomething?.Invoke();