我有以下代码:
await _user?.DisposeAsync();
Visual Studio
突出显示此代码,并指出"可能的 NullReferenceException">
顺便说一句,没有await
Visual Studio
不会显示此警告为什么NullReferenceException
在这里是可能的?
await null
会抛出一个NullReferenceException
。因此,如果_user
为 null,则_user?.DisposeAsync()
将返回 null
,并且await
将抛出。
你可以做:
if (_user != null)
{
await _user.DisposeAsync();
}
(如果 _user
的本地副本可能在读取之间更改,则可能需要该副本(
或:
await (_user?.DisposeAsync() ?? ValueTask.CompletedTask);
(在 .NET 5 之前,您将需要:(
await (_user?.DisposeAsync().AsTask() ?? Task.CompletedTask);
方法返回可以等待的Task
。 如果_user
为 null,那么您不会返回Task
而是返回 null
await 期待一个结果。如果_user为 null,则结果将为 null,因此为 NullReferenceException。