Créer IEnumerable<T>.Find()
Je voudrais écrire:
IEnumerable<Car> cars;
cars.Find(car => car.Color == "Blue")
Puis-je l'obtenir avec les méthodes d'extension? La suite de l'échec car il appelle de manière récursive lui-même, plutôt que d'appeler IList.Find().
public static T Find<T>(this IEnumerable<T> list, Predicate<PermitSummary> match)
{
return list.ToList().Find(match);
}
Merci!
OriginalL'auteur Brian Low | 2010-06-03
Vous devez vous connecter pour publier un commentaire.
Cette méthode existe déjà. Il est appelé FirstOrDefault
Si vous étiez à mettre en œuvre vous-même, il serait un peu comme ce
Super Réponse! Je n'ai jamais réalisé cette surcharge existé et ont été l'ajout superflu .Où(...).(Première) consolidés.
OriginalL'auteur JaredPar
Jared est correct si vous êtes à la recherche pour une seule voiture bleue, tout bleu, voiture suffit. Est-ce que vous cherchez, ou vous êtes à la recherche pour obtenir une liste des voitures bleues?
Première voiture bleue:
Liste des voitures bleues:
Seul est correct si vous êtes garantis d'avoir UNE SEULE voiture dans l'ensemble de la liste. Si vous avez plus d'une voiture, ou pas de voitures, vous allez lever une exception InvalidOperationException. FirstOrDefault sera de retour à votre voiture bleue, ou le type par défaut (souvent nulle). D'abord, une exception sera levée si il n'y a rien qui correspond au prédicat.
OriginalL'auteur StyxRiver
Vous savez que
Find(...)
peut être remplacé parWhere /First
Ce sera le retour
null
dans le cas où le prédicat ne correspond pas.Vous pouvez spécifier le prédicat directement sur
FirstOrDefault()
et laisserWhere()
.Ah, vous avez raison, j'ai oublié sur le prédicat.
OriginalL'auteur Aren