C#空条件运算符在调用异步任务方面有什么区别吗?

Hon*_*ong 2 c#

之间有什么区别

await myObject.fooAsync();
Run Code Online (Sandbox Code Playgroud)

await myObject?.fooAsync();
Run Code Online (Sandbox Code Playgroud)

当myObject为null时,它们似乎引发相同的异常:对象引用未设置为对象的实例。有人能对此有所启示吗?

Pet*_*iho 5

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

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

当您使用空条件运算符时,如果其中应用了该运算符的任何元素为null,则其所涉及的表达式的结果将为null。

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

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

  • _你不能只是撒?在您的代码中,并希望它成为null安全的。_可能会反复打印出来并将其粘贴在同事的桌子上。他通过不断(懒惰)滥用它来使我离开整个功能。 (3认同)