以下(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 功能,请查看我的文章。
我想你误解了这个运算符的工作方式。
var result = t?.GetSomething();
这里t?.
的意思是"如果t
为空,则在此处停止并返回 null;否则,取消引用t
并检索成员GetSomething
。
现在,您没有检查GetSomething
的任何内容。相反,您可以执行以下操作:
var result = t?.GetSomething?.Invoke();