首页 > 解决方案 > C# null 条件运算符在调用异步任务时有什么不同吗?

问题描述

有没有区别

await myObject.fooAsync();

await myObject?.fooAsync();

当 myObject 为空时,它们似乎抛出了相同的异常:对象引用未设置为对象的实例。任何人都可以对此有所了解吗?

标签: c#

解决方案


当 myObject 为空时,它们似乎抛出了相同的异常:对象引用未设置为对象的实例。

当然可以,但出于不同的原因。

当您使用空条件运算符时,如果应用该运算符的任何元素为空,则它所涉及的表达式将评估为空。

当您不使用运算符时,您会得到一个NullReferenceException,因为您不能调用fooAsync()空引用。当您使用该运算符时,您会得到相同的异常,但这一次是因为您不能等待空引用。

这个故事的寓意:你不能只是?.在你的代码中到处乱扔,并期望它变得空安全。那不是它的作用。它只是常用的空相关表达式的简写。您仍然需要担心 null 引用,因为 null 条件运算符本身可以生成 null 引用。


推荐阅读