c# - C# null 条件运算符在调用异步任务时有什么不同吗?
问题描述
有没有区别
await myObject.fooAsync();
和
await myObject?.fooAsync();
当 myObject 为空时,它们似乎抛出了相同的异常:对象引用未设置为对象的实例。任何人都可以对此有所了解吗?
解决方案
当 myObject 为空时,它们似乎抛出了相同的异常:对象引用未设置为对象的实例。
当然可以,但出于不同的原因。
当您使用空条件运算符时,如果应用该运算符的任何元素为空,则它所涉及的表达式将评估为空。
当您不使用运算符时,您会得到一个NullReferenceException
,因为您不能调用fooAsync()
空引用。当您使用该运算符时,您会得到相同的异常,但这一次是因为您不能等待空引用。
这个故事的寓意:你不能只是?.
在你的代码中到处乱扔,并期望它变得空安全。那不是它的作用。它只是常用的空相关表达式的简写。您仍然需要担心 null 引用,因为 null 条件运算符本身可以生成 null 引用。
推荐阅读
- qml - 从 nixpkgs 使用 qt5 时如何配置 QML 导入路径
- java - 在窗口对话框中排除文件 OSX
- ampscript - AMPscript 多个 if/elseif 语句抛出错误“IF Not Closed”
- c++ - 在 C++ 中嵌入 python 时如何修复“ImportError: No module named 'tensorflow'”
- php - 如何在正则表达式中识别目录升级匹配根?
- cordova - IBM MFP7.1 Hybrid iOS 应用程序被 Apple Store 拒绝,如何解决?
- java - 单击 textview 时编辑 SQLite 数据
- python - RangeIndex 对象不可调用
- html - 使用多个行跨度时,HTML 单元格不组合高度
- python - 使用 Flask-Login 时 Python 中的字节和整数问题