2011-04-19 24 views
6

मेरे पास अज्ञात वर्ग का संग्रह है और मैं इसकी एक खाली सूची वापस करना चाहता हूं।संग्रह की खाली सूची कैसे प्राप्त करें?

उपयोग करने के लिए सबसे अच्छी पठनीय अभिव्यक्ति क्या है?

मैं निम्नलिखित लेकिन मुझे नहीं लगता कि की, हालांकि वे readably पर्याप्त हैं:

var result = MyCollection.Take(0).ToList(); 

var result = MyCollection.Where(p => false).ToList(); 

नोट: मैं संग्रह में ही खाली करने के लिए नहीं करना चाहती।

कोई सुझाव!

+6

, शायद यह एक ठोस बनाने का समय है? – Oded

+0

@ ओडेड: हाँ, आप सही हैं। धन्यवाद। – Homam

उत्तर

31

क्या बारे में:

Enumerable.Empty<T>(); 

यह एक खाली गणनीय प्रकार टी की है जो देता है तुम सच में एक सूची चाहते हैं तो आप ऐसा करने के लिए स्वतंत्र हैं:

Enumerable.Empty<T>().ToList<T>(); 
एक गुमनाम प्रकार के बजाय
+1

यह बेहतर है यदि आप खाली आईएनयूमेरेबल में वापस लौटना चाहते हैं। यह सूचियों के लिए नई सूची () वापस करने के बराबर है। ToList विस्तार विधि हुड के तहत एक नई सूची करता है। –

6

प्रदर्शन कारणों से, आपको पहले विकल्प के साथ चिपकना चाहिए।

दूसरा एक खाली सूची लौटने से पहले पूरे संग्रह पर फिर से शुरू होगा।

क्योंकि अज्ञात प्रकार कोई सूची बनाने के लिए, स्रोत कोड में, कोई रास्ता नहीं है। हालांकि, प्रतिबिंब के माध्यम से ऐसी सूची बनाने का एक तरीका है।

9

यह देखते हुए कि आपके पहला सुझाव काम करता है और अच्छा प्रदर्शन करना चाहिए - क्यों एक विस्तार विधि नहीं बना, तो पठनीयता केवल मुद्दा है,:

public static IList<T> CreateEmptyCopy(this IEnumerable<T> source) 
{ 
    return source.Take(0).ToList(); 
} 

अब आप

var result = MyCollection.CreateEmptyCopy(); 
10

करने के लिए अपने उदाहरण refactor कर सकते हैं दरअसल, यदि आप एक सामान्य विस्तार का उपयोग करते हैं तो आपको इसे प्राप्त करने के लिए किसी भी लिंक का उपयोग भी नहीं करना पड़ता है, आपके पास पहले से ही अज्ञात प्रकार टी

public static IList<T> GetEmptyList<T>(this IEnumerable<T> source) 
{ 
    return new List<T>(); 
} 

var emp = MyCollection.GetEmptyList(); 
के माध्यम से खुलासा हुआ है
संबंधित मुद्दे