我有一个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
答案 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;
}