2015-11-08 35 views
10

我遇到一個有趣的System.NullReferenceException,而在C#中使用新的空條件運算符。下面的代碼給了我一個NullReferenceException如果「MyObject來」爲空:C#空值條件運算符錯誤,並等待

await this.MyObject?.MyMethod() 

我會一直預計,到「的MyMethod」將根本無法進行通話,如果「MyObject來」爲空,或者我誤解了空條件運算符的目的是什麼?

回答

9

您可以添加??運算符,因此如果?.返回null任務,請使用CompletedTask代替。

await (this.MyObject?.MyMethod() ?? Task.CompletedTask) 

我會一直預計,到「的MyMethod」就是不能當「MyObject來」是空的呼籲。

這是真的。 ?.運算符返回空任務,而不是調用MyMethod。由於您無法在空任務上等待,所以會產生空引用異常。該任務必須初始化。