创建IEnumerable <T> .Find()

Bri*_*Low 20 c# ienumerable extension-methods

我想写:

IEnumerable<Car> cars;
cars.Find(car => car.Color == "Blue")
Run Code Online (Sandbox Code Playgroud)

我可以用扩展方法完成这个吗?以下失败是因为它递归调用自身而不是调用IList.Find().

public static T Find<T>(this IEnumerable<T> list, Predicate<PermitSummary> match)
{
    return list.ToList().Find(match);
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Jar*_*Par 52

这种方法已经存在.它被称为FirstOrDefault

cars.FirstOrDefault(car => car.Color == "Blue");
Run Code Online (Sandbox Code Playgroud)

如果你自己实现它会看起来有点像这样

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);
}
Run Code Online (Sandbox Code Playgroud)


Sty*_*ver 9

Jared是正确的,如果你正在寻找一辆蓝色的汽车,任何蓝色的汽车就足够了.这是你在找什么,或者你在寻找蓝色车的清单?

第一辆蓝色车:

Car oneCar = cars.FirstOrDefault(c => c.Color.Equals("Blue"));
Run Code Online (Sandbox Code Playgroud)

蓝色车列表:

IEnumerable<Car> manyCars = cars.FindAll(car => car.Color.Equals("Blue"));
Run Code Online (Sandbox Code Playgroud)