-1

以下(C# Interactive)编译但失败了。不知道我错过了什么......

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

2 回答 2

8

当然可以!

根据您的代码,tis not null,所以?.是多余的。

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

你要找的是这个:

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

要了解新的 C# 6 功能是如何实现的,请查看我的文章

于 2016-02-25T20:01:54.663 回答
3

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

var result = t?.GetSomething();

这里的t?.意思是“如果t为null,就停在这里并返回null;否则,取消引用t并检索成员GetSomething

现在,您没有在GetSomething. 相反,您可以这样做:

var result = t?.GetSomething?.Invoke();
于 2016-02-25T20:02:29.370 回答