[英]Create IEnumerable<T>.Find()
我想写:
IEnumerable<Car> cars;
cars.Find(car => car.Color == "Blue")
我可以用扩展方法完成这个吗? 以下失败是因为它递归调用自身而不是调用IList.Find()。
public static T Find<T>(this IEnumerable<T> list, Predicate<PermitSummary> match)
{
return list.ToList().Find(match);
}
谢谢!
这种方法已经存在。 它被称为FirstOrDefault
cars.FirstOrDefault(car => car.Color == "Blue");
如果你自己实现它会看起来有点像这样
public static T Find<T>(this IEnumerable<T> enumerable, Func<T,bool> predicate) {
foreach ( var current in enumerable ) {
if ( predicate(current) ) {
return current;
}
}
return default(T);
}
Jared是正确的,如果你正在寻找一辆蓝色的汽车,任何蓝色的汽车就足够了。 这是你在寻找什么,或者你在寻找蓝色车的清单?
第一辆蓝色车:
Car oneCar = cars.FirstOrDefault(c => c.Color.Equals("Blue"));
蓝色车列表:
IEnumerable<Car> manyCars = cars.FindAll(car => car.Color.Equals("Blue"));
你知道Find(...)
可以用Where / First
代替
IEnumerable<Car> cars;
var result = cars.Where(c => c.Color == "Blue").FirstOrDefault();
如果谓词不匹配,这将返回null
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.