如何查看列表<>包含TimeSpan的比较

时间:2012-10-03 22:36:35

标签: asp.net list timespan

我有一个TimeSpans列表,我需要检查它们中的任何一个是否超过5小时。我知道我可以循环遍历列表,但如果可能的话我更愿意使用List<>的内置函数之一来检查条件。

if (driverSchedules.GetAllShifts().Contains(delegate(TimeSpan ts) { return ts > new TimeSpan(5,0,0);}))
{
    return true;
}

* GetAllShifts返回一个List。

我得到的错误说:

"Cannot convert anonymous method to type 'System.TimeSpan' because it is not a 
delegate type"

据我所知,“委托类型”是System.TimeSpan

2 个答案:

答案 0 :(得分:3)

1:Contains()不以委托为参数;它想要一个特定的TimeSpan值。

2:由于您想知道集合中的任何项是否与特定条件匹配,请使用Any();它接受代表。

return driverSchedules.GetAllShifts().Any(ts => ts > new TimeSpan(5,0,0));

答案 1 :(得分:-1)

您正在使用的Contains()需要TimeSpan对象作为参数,而不是委托类型。您想使用接受委托自定义比较器的Any<>扩展名。

if (driverSchedules.GetAllShifts().Any<TimeSpan>((ts) => { return ts > new TimeSpan(5, 0, 0); }))
{
    return true;
}