【问题标题】:C# Not all code paths return a valid in lambda expression of type funcC# 并非所有代码路径都返回 func 类型的有效 lambda 表达式
【发布时间】:2015-11-29 01:22:29
【问题描述】:

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

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 表达式的值 '功能'

【问题讨论】:

  • if (firstOrDefault != null) ... else ?
  • firstOrDefaultnull 时,你的lambda 会返回什么?

标签: c# lambda


【解决方案1】:

在这里你需要从你的所有路径中返回一些东西。

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();

【讨论】:

    【解决方案2】:
    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" - 不需要。

    【讨论】:

    • 这样会导致'无法将 null 转换为 'int',因为它不是......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多