以下(C#Interactive)编译但爆炸。不知道我错过了什么...C#6方法失败的条件运算符失败
class Test { public Func<object> GetSomething = null; }
var t = new Test();
var result = t?.GetSomething();
以下(C#Interactive)编译但爆炸。不知道我错过了什么...C#6方法失败的条件运算符失败
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
为空,就在这里停车,并返回null;否则,取消引用t
和检索成员GetSomething
现在,你不检查就GetSomething
东西相反,可以这样做:
var result = t?.GetSomething?.Invoke();
你是什么意思“炸毁” –
NRE在运行时,正是我不期望 - 我所期望的空条件操作者只需设置结果为空? – dudeNumber4