Visual Studio 假定 FirstOrDefaultAsync() 的返回值不能为空

Posted

技术标签:

【中文标题】Visual Studio 假定 FirstOrDefaultAsync() 的返回值不能为空【英文标题】:Visual Studio assumes return value from FirstOrDefaultAsync() cannot be null 【发布时间】:2021-12-14 02:04:52 【问题描述】:

我有以下问题。

var railcarInfo = await (from rt in DbContext.RailcarTrips
                         where rt.WaybillRailcar.RailcarNumber == clm.RailcarNumber &&
                         rt.WaybillRailcar.Waybill.CreateDate <= clm.SightingDate
                         orderby rt.WaybillRailcar.Waybill.CreateDate descending
                         select new
                         
                             RailcarTrip = rt,
                             WaybillCreateDate = rt.WaybillRailcar.Waybill.CreateDate,
                             IsLoaded = rt.WaybillRailcar.Weight > 0
                         )
                         .AsNoTracking()
                         .FirstOrDefaultAsync();

但由于某种原因,Visual Studio 在此查询之后立即确定 'railcarInfo' 此处不为空

FirstOrDefaultAsync() 的要点是它返回集合中的第一项,如果集合为空,则返回 null。这里绝对可以为空。谁能明白为什么 Visual Studio 似乎在这里感到困惑?

【问题讨论】:

@Evk 很好的发现,如果它刚刚点击了定义......无论如何,这可能值得回答,你拥有我合法允许给予的所有可用的支持 【参考方案1】:

正如docs 中提到的关于此功能和 EF 的内容:

在 EF Core 6.0 之前,公共 API 表面没有为 可空性(公共 API 是“null-oblivious”),有时 打开 NRT 功能时使用起来很尴尬。这显着 包括 EF Core 公开的异步 LINQ 运算符,例如 FirstOrDefaultAsync。公共 API 已针对可空性进行了完整注释 从 EF Core 6.0 开始。

所以您可能使用的是 EF 版本

【讨论】:

以上是关于Visual Studio 假定 FirstOrDefaultAsync() 的返回值不能为空的主要内容,如果未能解决你的问题,请参考以下文章

这些 G++ 标志的 Visual Studio 等效项?

Visual studio 通用开发环境配置:SDL,FFMPEG为例

visual studio怎么替代IAR

无法找到visual studio 2017生成工具

dev文件用visual studio怎么打开

visual studio 2005 图像上 添加 数字