首页 > 解决方案 > 值中引用类型的可空性与目标类型不匹配

问题描述

我正在玩可为空的引用类型和实体框架核心。该方法应该异步返回一个 nullable User,但编译器抱怨

CS8619
Nullability of reference types in value doesn’t match target type.

源代码如下

public class UserRepository : IUserRepository
{
    private readonly ApplicationDbContext DbContext;

    public UserRepository(ApplicationDbContext dbContext)
    {
        DbContext = dbContext;
    }

    public Task<User?> GetByEmailAddress(string emailAddress) =>
        DbContext.Users.SingleOrDefaultAsync(x => x.EmailAddress == emailAddress);
}

编写此代码的正确方法是什么?

更新,我希望打开 nullable 会改变它的含义SingleOrDefaultAsync以使其有效地表示Task<{Non null user}>,所以如果我使我的方法异步(如以下代码),那么 C# 编译器将解开User并转换Task<>User?

    public async Task<User?> GetByEmailAddress(string emailAddress) =>
        await DbContext.Users.SingleOrDefaultAsync(x => x.EmailAddress == emailAddress);

有没有另一种方法可以做到这一点而不必制作我的方法async

标签: c#

解决方案


我认为这是 Github 上为 Roslyn 编译器指定的问题:

Task<T>当类型参数可以为空时,允许从异步方法返回空


推荐阅读