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


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

await this.MyObject?.MyMethod()

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


7622
2017-11-08 09:32


起源



答案:


你可以加 ?? 运营商如果 ?. 返回null任务使用CompletedTask。

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

我希望如果“MyObject”为空,就不会调用“MyMethod”。

确实如此。该 ?. operator返回null任务而不是调用 MyMethod。由于您无法等待null任务,因此会生成null引用异常。任务必须初始化。


14
2017-11-08 09:35