可能的空引用返回c# linq

Viv*_*Dev 4 c# linq

我有这个 linq 查询。它抱怨警告消息。

警告 CS8603:可能返回空引用

代码:

return await _applicationDbContext.Pies
                .Include(x => x.Portions).AsSingleQuery()
                .Include(x => x.Ingredients).AsSplitQuery()
                .SingleOrDefaultAsync(x => x.Id == id);
Run Code Online (Sandbox Code Playgroud)

更重要的是,这使得它变得丑陋,到处都是曲线。

有什么办法可以解决吗?

与 2022 年警告消息

看了下面的SO帖子,但不知道该怎么做。

som*_*men 7

SingleOrDefaultAsync()完全执行方法名称中的操作,它尝试查找单个条目,如果未找到任何条目,则返回默认值。

引用类型(Pie在本例中为您的对象)的默认值是 null,因此会出现警告。

您可以返回Task<Pie?>或以某种方式处理空值。一种方法是使用.SingleAsync()替代方法,如果没有找到任何内容,它将抛出异常 - 但因此它永远不会返回 null。


Dav*_*haw 5

该方法返回一个Task<Pie>.

末尾的has意味着如果找不到匹配的项目return ...,它将返回。SingleOrDefaultAsync(...)iddefault(Pie)null

您需要决定是否:

  1. 此方法可以返回 null,然后将签名更改为Task<Pie?>让调用代码知道它可以返回 null。
  2. 此方法不应返回 null,SingleAsync(...)这样如果未找到匹配,它将引发运行时异常id