5

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

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

*GetAllShifts 返回一个列表。

我得到的错误说:

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

据我所知,“代表类型”是System.TimeSpan

4

2 回答 2

3

1.:Contains()不接受委托作为参数;它需要一个特定的 TimeSpan 值。

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

return driverSchedules.GetAllShifts().Any(ts => ts > new TimeSpan(5,0,0));
于 2012-10-03T22:38:58.367 回答
-1

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

if (driverSchedules.GetAllShifts().Any<TimeSpan>((ts) => { return ts > new TimeSpan(5, 0, 0); }))
{
    return true;
}
于 2012-10-03T22:40:21.407 回答