我在C#中使用新的空条件运算符时遇到了一个有趣的System.NullReferenceException。如果“MyObject”为null,则以下代码为我提供NullReferenceException:
await this.MyObject?.MyMethod()
我希望如果“MyObject”为空,或者我误解了空条件运算符的用途,就不会调用“MyMethod”?
我在C#中使用新的空条件运算符时遇到了一个有趣的System.NullReferenceException。如果“MyObject”为null,则以下代码为我提供NullReferenceException:
await this.MyObject?.MyMethod()
我希望如果“MyObject”为空,或者我误解了空条件运算符的用途,就不会调用“MyMethod”?
你可以加 ??
运营商如果 ?.
返回null任务使用CompletedTask。
await (this.MyObject?.MyMethod() ?? Task.CompletedTask)
我希望如果“MyObject”为空,就不会调用“MyMethod”。
确实如此。该 ?.
operator返回null任务而不是调用 MyMethod
。由于您无法等待null任务,因此会生成null引用异常。任务必须初始化。