2011-04-10 15 views
49

Liste ararken, bir istisna atmak yerine null döndüren bir linq lambda arama yöntemi var mı? (Atılmış olmaktan istisna önlemek)Bulun() ve İlk(), istisnalar atar, bunun yerine null nasıl döndürülür?

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

Sadece ifadeyi tekrarlamak yanlış geliyor:

Benim şimdiki çözüm gibi bir şey olduğunu.

şey gibi ...

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

... bana iyi hissediyor. Yoksa sadece ben mi?

Bu konuda daha iyi bir yaklaşımınız var mı? (Çözelti sadece daha iyi bir çözüm iyidir, null adlı iade gerekmez)

cevap

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

Bala R'ın cevabı, ben sadece bir parça bilgi eklemek istedim doğrudur:

Not olduğunu List<T> eğer by-design öğesi boş olamaz nesneleri içerir, FirstOrDefault, null'dan başka bir şey döndürecektir. Derleyici, if deyiminde bunun bir uyarı/hata vermesi olasıdır.

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

ve unutma - liste bu genel tür ([Varsayılan Değerler Tablo] için varsayılan değer (http://msdn.microsoft içerecektir eğer: Bu durumda böyle durumunuzu yaklaşmalıdır. com/en-us/library/83fhsxwc.aspx)), "Bul" yöntemini kullanarak var olup olmadığını söyleyemezsiniz. Bu durumlarda 'FindIndex',' Exists' veya 'Contains' kullanmalısınız. – HuBeZa

İlgili konular