web-dev-qa-db-fra.com

Find () et First () lève des exceptions, comment retourner null à la place?

Existe-t-il une méthode de recherche linq lambda qui renvoie null, au lieu de lever une exception, lors de la recherche dans une liste?

Ma solution actuelle est quelque chose comme: (pour éviter que l'exception ne soit levée)

if (list.Exists(x => x.Foo == Foo))
{
    var listItem = list.Find(x => x.Foo == Foo);
}

C'est juste mal de répéter l'expression.

Quelque chose comme ...

var listItem = list.Find(x => x.Foo == Foo);
if (listItem != null)
{
    //Do stuff
}

... me fait du bien. Ou est-ce juste moi?

Avez-vous une meilleure approche sur celui-ci? (La solution n'a pas besoin de renvoyer null, juste une meilleure solution est bonne)

61
Ben Galler
var listItem = list.FirstOrDefault(x => x.Foo == Foo);
if (listItem != null)
{
    //Do stuff
}
119
Bala R

La réponse de Bala R est correcte, je voulais juste ajouter une information:

Notez que si List<T> contient des objets dont la conception ne peut pas être nulle, FirstOrDefault renverra autre chose que null. Le compilateur est susceptible de donner un avertissement/erreur à ce sujet à l'instruction if. Dans ce cas, vous devez aborder votre situation comme ceci:

List<MyObjectThatCannotBeNull> list;
var listItem = list.FirstOrDefault(x => x.Foo == Foo);
if (!listItem.Equals(default(MyObjectThatCannotBeNull)))
{
    //Do stuff
}
42
Bazzz