c# - 值中引用类型的可空性与目标类型不匹配
问题描述
我正在玩可为空的引用类型和实体框架核心。该方法应该异步返回一个 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
?
解决方案
我认为这是 Github 上为 Roslyn 编译器指定的问题:
推荐阅读
- laravel - 如何在 Laravel 5.6 中将数组插入数据库
- kotlin - Intellij 自动完成在多平台库依赖项上失败
- mypy - 是否可以运行 mypy pre-commit 而不会失败?
- python - attr.asdict(x) 和 x.__dict__ 有什么区别?
- python - 使用并行计算的 for 循环
- view - Maximo:如何在主要对象为视图的应用程序中启用列表选项卡中的搜索
- c# - 泛型类约束多级继承
- angularjs - 手动插入一次性绑定
- javascript - How can I make a function to program Chrome to set itself the "Break" status at my workplace
- laravel - Predis: Error while reading line from the server. [tcp://127.0.0.1:6379]