2016-02-25 63 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();