有什么区别吗
await myObject.fooAsync();
和
await myObject?.fooAsync();
当 myObject 为 null 时,它们似乎抛出相同的异常:未将对象引用设置为对象的实例。 有人能解释一下吗?
最佳答案
They seem to throw the same exception when myObject is null: Object reference not set to an instance of an object.
当然,但出于不同的原因。
当您使用 null 条件运算符时,如果应用该运算符的任何元素为 null,则其涉及的表达式的计算结果将为 null。
当您不使用该运算符时,您会收到 NullReferenceException
,因为您无法对 null 引用调用 fooAsync()
。当您使用该运算符时,您会得到相同的异常,但这一次是因为您无法等待空引用。
这个故事的寓意是:你不能只是在代码中散布 ?.
并期望它成为 null 安全的。它不是这么做的。它只是常用的与 null 相关的表达式的简写。您仍然需要担心空引用,因为空条件运算符本身可以生成空引用。
关于c# - C# null 条件运算符在调用异步任务时有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56719786/