C#:空警告,即使这是不可能的

C#: null warning even though it's not possible

好的,我这里有这个函数,在某些情况下可以 return 一个空值。但是,即使在测试之前,它仍然说它可能是空的。

我的代码:

if (Account.FindAccount(usernameInput) == null) { return; }    
if (Account.FindAccount(usernameInput).password == "1234") // warning CS8602: Dereference of a possibly null reference
{ 
    //Do stuff
} 

那个FindAccount操作保证是幂等的吗?编译器没有这样的保证。它在一个调用中 return 的内容在另一个调用中可能不是 return。

更重要的是...如果相信对于相同的输入它总是return相同的结果,为什么要调用它两次?只需调用一次并存储结果:

var account = Account.FindAccount(usernameInput);
if (account == null) { return; }    
if (account.password == "1234")
{ 
    //Do stuff
}