以下(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