C#并非所有代码路径都返回func类型的有效lambda表达式

本文关键字:类型 func 有效 表达式 lambda 返回 路径 代码 | 更新日期: 2023-09-27 18:11:11

首先我尝试了这个,我的代码:

timeReports = timeReports.OrderByDescending(x => x.Date)
                  .ThenByDescending(x => x.TimeReportDatas.First().StartHour)
                  .ToList();

但在我的项目中,我所有的项目都没有TimeReportDatas,所以它确实崩溃了,因为它不包含任何元素。

所以我把代码改成了这个:

timeReports = timeReports.OrderByDescending(x => x.Date).ThenByDescending(x =>
{
    TimeReportData firstOrDefault = x.TimeReportDatas.FirstOrDefault();
    if (firstOrDefault != null)
        return firstOrDefault.StartHour;
}).ToList();

但是我留下了以下错误:

并非所有代码路径都在类型为的lambda表达式中返回值"Func">

C#并非所有代码路径都返回func类型的有效lambda表达式

在这里,您需要从所有路径返回一些东西。

timeReports = timeReports.OrderByDescending(x => x.Date).ThenByDescending(x =>
{
    var firstOrDefault = x.TimeReportDatas.FirstOrDefault();
    if (firstOrDefault != null)
    {
        return firstOrDefault.StartHour;
    }
    else
    {
        return 0;
    }
}).ToList();

或者更简单的方法:

timeReports = timeReports.OrderByDescending(x => x.Date)
                         .ThenByDescending(x => (x.TimeReportDatas.FirstOrDefault() != null) ? x.TimeReportDatas.First().StartHour : 0)
                         .ToList();
timeReports = timeReports.OrderByDescending(x => x.Date).ThenByDescending(x =>
{
    TimeReportData firstOrDefault = x.TimeReportDatas.FirstOrDefault();
    if (firstOrDefault != null)
        return firstOrDefault.StartHour;
    return 0;
}).ToList();

如果firstOrDefault为null,则返回"0"或带有标准数据的新元素。或者对lambda使用Where(…(并阻止"If"-不需要。