带有空条件运算符和等待的C#错误

时间:2015-11-08 09:32:19

标签: c# nullreferenceexception null-conditional-operator

我在C#中使用新的空条件运算符时遇到了一个有趣的System.NullReferenceException。如果“MyObject”为null,则以下代码给出了NullReferenceException:

await this.MyObject?.MyMethod()

我希望如果“MyObject”为空,或者我误解了空条件运算符的用途,就不会调用“MyMethod”吗?

1 个答案:

答案 0 :(得分:16)

您可以添加??运算符,这样如果?.返回null任务,请使用CompletedTask。

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

我希望打电话给" MyMethod"如果" MyObject"是空的。

这是真的。 ?.运算符返回null任务而不是调用MyMethod。由于您无法等待null任务,因此会生成null引用异常。任务必须初始化。