2011-04-10 10 views
49

क्या कोई लिंक्स लैम्ब्डा खोज विधि है जो एक सूची खोजते समय अपवाद फेंकने की बजाय शून्य लौटाती है? (फेंके जाने से अपवाद से बचने के लिए)खोजें() और पहले() अपवाद फेंकता है, बदले में कैसे बदलेगा?

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

यह सिर्फ अभिव्यक्ति को दोहराने के लिए गलत लगता है:

मेरे वर्तमान समाधान की तरह कुछ है।

कुछ की तरह ...

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

... मेरे लिए बेहतर महसूस करता है। या यह सिर्फ मैं हूं?

क्या आपके पास इस पर बेहतर दृष्टिकोण है? (समाधान सिर्फ एक बेहतर समाधान अच्छा है अशक्त लौटने किए जाने की जरूरत नहीं है,)

उत्तर

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

बाला आर के जवाब सही है, मैं सिर्फ जानकारी का एक टुकड़ा जोड़ना चाहते थे:

ध्यान दें कि यदि List<T> ऐसी ऑब्जेक्ट्स हैं जो डिज़ाइन शून्य नहीं हो सकती हैं, FirstOrDefaultnull से कुछ और लौटाएगी। कंपाइलर अगर कथन पर इसकी चेतावनी/त्रुटि दे सकता है। उस मामले में आप इस तरह अपनी स्थिति संपर्क करना चाहिए:

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

और भूल नहीं है - अगर आपकी सूची है कि जेनेरिक प्रकार ([डिफ़ॉल्ट मान तालिका] के लिए डिफ़ॉल्ट मान (http://msdn.microsoft शामिल होंगे। com/en-us/library/83fhsxwc.aspx)), आप यह नहीं बता सकते कि मान मौजूद है या नहीं 'ढूंढें' विधि का उपयोग नहीं कर रहा है। आपको उन स्थितियों में 'FindIndex',' Exists 'या' Contains' का उपयोग करना चाहिए। – HuBeZa

संबंधित मुद्दे