可能的空引用 return c# linq

possible null reference return c# linq

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

Warning CS8603: Possible null reference return

代码:

return await _applicationDbContext.Pies
                .Include(x => x.Portions).AsSingleQuery()
                .Include(x => x.Ingredients).AsSplitQuery()
                .SingleOrDefaultAsync(x => x.Id == id);

此外,这使它变得丑陋,到处都是波浪形。

有什么办法可以解决吗?

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

SingleOrDefaultAsync() 完全按照方法名称中的内容进行操作,它会尝试查找单个条目,如果未找到,则 return 为默认值。

引用类型的默认值,您对象 Pie 在这种情况下为空,因此出现警告。

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

方法 return 是 Task<Pie>

return ... 的末尾有 SingleOrDefaultAsync(...) ,这意味着如果它找不到匹配 id 的项目,它将 return default(Pie) 这将成为 null.

您需要决定是否:

  1. 此方法可以 return null,然后将签名更改为 Task<Pie?> 让调用代码知道它可以 return null。
  2. 此方法不应 return null,使用 SingleAsync(...) 以便在找不到匹配的 id 时抛出运行时异常。