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

标签 c# nullreferenceexception null-conditional-operator

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

await this.MyObject?.MyMethod()

如果“MyObject”为空,我本以为不会调用“MyMethod”,还是我误解了空条件运算符的用途?

最佳答案

您可以添加 ?? 运算符,因此如果 ?. 返回空任务,请改用 CompletedTask。

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

I would've expected that the call to "MyMethod" would simply not be made if "MyObject" is null.

没错。 ?. 运算符返回空任务而不是调用 MyMethod。空引用异常是因为您不能等待空任务。必须初始化任务。

关于空条件运算符和等待的 C# 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33592547/

相关文章:

c# - 发送或监听时出错,Azure ServiceBus

c# - 将具有复合键/外键的表映射到该表

c# - WCF 回调、代理和线程安全

c# - INotifyPropertyChanged 奇怪的 NullReferenceException

c# - 我可以将属性应用于继承的成员吗?

VB.NET System.NullReferenceException

c++ - 空引用如何导致代码为 0xc0000005 的 SEH 异常?

c# - 为什么 null 条件运算符对 == 和 .Equals() 的行为不同?

c# - 是 C# 6 吗? (Elvis op)线程安全吗?如果是这样,如何?

c# - 如果为 null,则使用 null 条件运算符将值设置为 0