首页 > 解决方案 > 访问 Any() 中的前一个元素?LINQ C#

问题描述

我有一个时期的日期列表。在此列表的 1 个元素中,有两个变量:startDate 和 endDate。我面临的问题是 endDate 代表前一个元素的 endDate , startDate 代表当前元素的开始日期。

最初我的支票是这样的:

if(dateList.Any(d => DateTime.Now > d.startDate && DateTime.Now < d.endDate))
{
    // Do something
}

有没有办法访问这个Any()函数中的前一个元素?

标签: c#linq

解决方案


.Any() 方法在这里实际上只是一个花哨的缩写:

foreach (var date in dateList)
{
    if (DateTime.Now > date.StartDate && DateTime.Now < date.EndDate)
    {
        // Do something
        break;
    }
}

因此,从功能上讲,您可以编写自己的迭代器方法来执行此操作,并且只需要多几行代码:

Date previousDate = null;

foreach (var date in dateList) // using foreach works with any enumerable type
{
    if (DateTime.Now > date.StartDate && DateTime.Now < date.EndDate)
    {
        if (previousDate != null)
        {
            // Do something
        }

        break;
    }

    previousDate = date;
}

如果您经常这样做并且想要一个更简洁的扩展方法来帮助您用更少的代码完成此操作,您可以在这里使用 Jon Skeet 的回答:

使用 LINQ 计算与上一项的差异


推荐阅读