<T>

2009-06-07 8 views
15

सूची में IENumerable कास्टिंग करना मैं सोच रहा था कि सूची में एक आईनेमरेबल डालना संभव है या नहीं। क्या प्रत्येक आइटम को सूची में कॉपी करने के अलावा इसे करने का कोई तरीका है? <T>

उत्तर

26

जैसा कि पहले से ही सुझाव दिया गया है, yourEnumerable.ToList() का उपयोग करें। यह आपके IEnumerable के माध्यम से समझाता है, जो सामग्री को नए List में संग्रहित करता है। आप एक मौजूदा सूची की प्रतिलिपि नहीं बना रहे हैं, क्योंकि आपके IEnumerable तत्वों को आलसी बना सकते हैं।

यह वही है जो अन्य उत्तरों सुझाव दे रहे हैं, लेकिन स्पष्ट हैं। यहाँ disassembly है, ताकि आप सुनिश्चित हो सकते हैं:

public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source) 
{ 
    if (source == null) 
    { 
     throw Error.ArgumentNull("source"); 
    } 
    return new List<TSource>(source); 
} 
+0

क्या यह एक त्रुटि फेंक देगा यदि IENumerable शून्य नहीं है लेकिन खाली है? –

24

.ToList() विधि का उपयोग करें।

yourEnumerable.ToList(); 
+1

उपलब्ध नहीं का उपयोग कर System.Linq याद आ रही है :) है। यह पूरी तरह स्वीकार्य उत्तर होना चाहिए ... – CodingYourLife

0

नहीं, तुम, यदि आप सुनिश्चित कर रहे हैं नकल करना चाहिए कि संदर्भ सूची के संदर्भ है, तो आप इस

List<int> intsList = enumIntList as List<int>; 
+5

यदि आप * निश्चित * हैं कि यह एक सूची का संदर्भ है, तो आपको प्रत्यक्ष कास्ट का उपयोग करना चाहिए ताकि यदि आप गलत हैं तो यह अपवाद फेंक देगा। यदि आप सोचते हैं कि "as" का उपयोग करें * हो सकता है * एक सूची हो लेकिन आप निश्चित नहीं हैं, और न ही त्रुटि स्थितियां हैं। फिर परीक्षण करें कि परिणाम शून्य है या नहीं। –

+0

शायद एक 'अगर (intsList == null) intsList = नई सूची (enumIntList) जोड़ें;' अगर यह * सूची 'हो सकता है, पहले से ही, लेकिन कुछ ऐसे मामले हैं जहां यह नहीं है। – jerryjvl

1

तरह परिवर्तित एक नई सूची बनाने और उसके प्रारंभकर्ता करने के लिए पुराने IEnumerable पारित कर सकते हैं:

IEnumerable<int> enumerable = GetIEnumerable<T>(); 
    List<int> list = new List<int>(enumerable); 
+0

यह सूची भी कॉपी करता है .. –

+0

वैसे भी एक प्रतिलिपि होने की आवश्यकता होगी। – Shimmy

3

दूसरों के रूप में सुझाव दिया, बस एक गणनीय वस्तु पर ToList() विधि का उपयोग करें:

var myList = myEnumerable.ToList() 

लेकिन, अपनी IEnumerable वस्तु ToList() विधि नहीं है, तो और आप जैसे एक त्रुटि हो रही है निम्नलिखित:

'IEnumerable' 'ToList'

के लिए एक परिभाषा शामिल नहीं है

आप शायद System.Linq नाम स्थान से चूक रहे हैं, तो बस इसे जोड़ने:

using System.Linq 
संबंधित मुद्दे