2010-07-25 14 views
28

भविष्यवाणी के साथ मुझे यह स्पष्ट करने की आवश्यकता है कि दिए गए संग्रह में एक तत्व है।आईनेमेरेबल <T>।

मैं collection.Count(foo => foo.Bar == "Bar") > 0) के माध्यम से ऐसा कर सकता हूं लेकिन यह अनावश्यक नौकरी करेगा - पूरे संग्रह को फिर से चालू करें जबकि मुझे पहली घटना को रोकने की आवश्यकता है।

लेकिन मैं भविष्यवाणी के साथ Contains() का उपयोग करने का प्रयास करना चाहता हूं, उदा। foo => foo.Bar == "Bar"

वर्तमान में IEnumerable<T>.Contains दो हस्ताक्षर है:

  • IEnumerable<T>.Contains(T)

  • IEnumerable<T>.Contains(T, IEqualityComparer<T>)

तो मैं जाँच करने के लिए कुछ चर निर्दिष्ट करने के लिए है:

var collection = new List<Foo>() { foo, bar }; 
collection.Contains(foo); 

या अपने कस्टम IEqualityComparer<Foo> जो मेरे संग्रह के खिलाफ इस्तेमाल किया जाएगा लिखें:

class FooComparer : IEqualityComparer<Foo> 
{ 
    public bool Equals(Foo f1, Foo f2) 
    { 
     return (f1.Bar == f2.Bar); // my predicate 
    } 

    public int GetHashCode(Foo f) 
    { 
     return f.GetHashCode(); 
    } 
} 

तो वहाँ किसी भी अन्य तरीकों विधेय उपयोग करने के लिए कर रहे हैं?

उत्तर

58
.Any(predicate) 

आप जो चाहते हैं उसे लगता है; bool लौटाता है, जैसे ही एक मैच मिलता है, true लौटाता है, अन्यथा false। वहाँ भी है:

.All(predicate) 

जो एक समान तरीके से व्यवहार करती है, एक गैर मैच के रूप में के रूप में जल्द false लौटने बाकी true, पाया जाता है।

8

आप Any(predicate) का उपयोग कर सकते हैं। यदि किसी निश्चित संग्रह में पूर्वानुमान मौजूद है तो यह सही या गलत वापस आ जाएगा।

8

IEnumerable<T>.Any एक्सटेंशन पर एक नज़र डालें।

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