私は書きたいです:
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);
}
あなたが単一の青い車を探しているなら、ジャレッドは正しいです、どんな青い車でも十分です。それはあなたが探しているものですか、それとも青い車のリストを探していますか?
最初の青い車:
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
を返します。