以下(C# Interactive)编译但失败了。不知道我错过了什么......
class Test { public Func<object> GetSomething = null; }
var t = new Test();
var result = t?.GetSomething();
以下(C# Interactive)编译但失败了。不知道我错过了什么......
class Test { public Func<object> GetSomething = null; }
var t = new Test();
var result = t?.GetSomething();
当然可以!
根据您的代码,t
is not null
,所以?.
是多余的。
但t.GetSomething
不是。这就是抛出NullReferenceException
.
你要找的是这个:
var result = t.GetSomething?.Invoke();
要了解新的 C# 6 功能是如何实现的,请查看我的文章。
我认为您误解了该运算符的工作方式。
var result = t?.GetSomething();
这里的t?.
意思是“如果t
为null,就停在这里并返回null;否则,取消引用t
并检索成员GetSomething
。
现在,您没有在GetSomething
. 相反,您可以这样做:
var result = t?.GetSomething?.Invoke();