繁体   English   中英

创建IEnumerable <T> 。找()

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM