c# - C# null 条件运算符在调用异步任务时有什么区别吗?

标签 c#

有什么区别吗

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/

相关文章:

c# - 如果行已存在,如何将行插入表或添加值

c# - 没有秒和毫秒的 TimeOfDay

c# - 在同一 View Controller 中添加 Collection View 和 TableView - Xamarin iOS

java - AlarmManager BroadcastReceiver,onReceive 从未被调用

请求正文对象的各个成员的 C# swagger 文档

C# FTP 应用程序上传到本地目录

c# - asp.net c# 中是否有等效的 echo

c# - 将 rtsp 流转换为 http 流

c# - Managed Wifi Win32 API 是否有可靠的 .Net 包装器?

c# - .net 中的 SystemFileWatcher 之类的 Ftp 文件观察器?