之间有什么区别
await myObject.fooAsync();
Run Code Online (Sandbox Code Playgroud)
和
await myObject?.fooAsync();
Run Code Online (Sandbox Code Playgroud)
当myObject为null时,它们似乎引发相同的异常:对象引用未设置为对象的实例。有人能对此有所启示吗?
当myObject为null时,它们似乎引发相同的异常:对象引用未设置为对象的实例。
可以,但是出于不同的原因。
当您使用空条件运算符时,如果其中应用了该运算符的任何元素为null,则其所涉及的表达式的结果将为null。
当您不使用运算符时,会得到一个NullReferenceException,因为您无法调用fooAsync()空引用。当您确实使用运算符时,您会遇到相同的异常,但是这次是因为您无法等待空引用。
这个故事的寓意是:您不能只是随意地?.在代码中四处走动,并期望它成为null安全的。那不是它的作用。这只是常用的与空相关的表达式的简写。您仍然需要担心空引用,因为空条件运算符本身可以生成空引用。