修复数据库调用后返回的数据的空警告

Fixing null warnings on data returned after a database call

由于其他工作承诺,我已经离开 C# 编程几年了,并试图重新回到最繁重的事情中。

上次我写了下面的代码是允许的,没有给我任何警告:

public async Task<User> GetAsync(string userId)
{
    User user = null;
    using (SqlConnection connection = sqlObjectFactory.GetConnection())
    {
        using (SqlCommand command = sqlObjectFactory.GetCommand("SELECT FirstName, LastName FROM Users WHERE UserId = '12345678';", connection))
        {
            await connection.OpenAsync();
            using SqlDataReader reader = await command.ExecuteReaderAsync();
            if (await reader.ReadAsync())
            {
                user = new User
                {
                    FirstName = reader.GetString("FirstName"),
                    LastName = reader.GetString("LastName")
                };
            }
        }
    }
    return user;
}

但是下面的代码行有警告:

User user = null;

Warning: Converting null literal or possible null value to non-nullable type.

还有..

return user;

Warning: Possible null reference return.

我不太确定如何修复这些警告?我的意思是只能有 2 个可能的值 returned,找到用户然后 return 用户的详细信息,或者如果没有找到用户然后 return nothing/null 返回。

此处的最佳做法是什么?请大家指点一下好吗?

我知道很多代码都可以简化,但我们不要专注于此,为了 post,我只是快速地把一些东西放在一起。我也知道你可以关闭警告,但我喜欢它们,所以我不想关闭它们。

我正在使用 Visual Studio 2022.

引用类型(例如您的 User 对象)已默认变为 non-nullable (https://docs.microsoft.com/en-us/dotnet/csharp/nullable-references)。这意味着如果不明确声明它们可以为空,它们就不能再包含空值。

你能做的是return用户?从你的功能(注意问号)。添加问号表示变量可以为空。将您的函数重命名为 TryGetAsync 可能是合适的,让调用者知道 null allowance。