2016-02-25 39 views
-1

以下(C#Interactive)编译但爆炸。不知道我错过了什么...C#6方法失败的条件运算符失败

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

你是什么意思“炸毁” –

+0

NRE在运行时,正是我不期望 - 我所期望的空条件操作者只需设置结果为空? – dudeNumber4

回答

8

当然它!

通过您的代码,t不是null,所以?.是多余的。

但是t.GetSomething不是。这就是扔NullReferenceException

什么你要找的是这样的:

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

怎么看新的C#6的功能已经完成,看看my article

3

我想你误会了这个操作符的工作方式。

var result = t?.GetSomething(); 

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

现在,你不检查就GetSomething东西相反,可以这样做:

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