2010-05-14 23 views
17

टाइप करें मुझे एक सामान्य प्रकार बनाना है, लेकिन मुझे संकलन समय पर प्रकार नहीं पता है। मैं यह करना चाहता हूं:सिस्टम से जेनेरिक ऑब्जेक्ट प्रारंभ करें।

Type t = typeof(whatever); 
var list = new List<t> 

यह संकलित नहीं होगा, क्योंकि टी मान्य प्रकार नहीं है। लेकिन यह सभी वैध प्रकार के बारे में जानता है। क्या सिस्टम से जेनेरिक सूची को गतिशील रूप से बनाने का कोई तरीका है। इस तरह टाइप करें? मुझे प्रतिबिंब की आवश्यकता हो सकती है, और यह ठीक है, मैं बस थोड़ा सा खो गया हूं।

उत्तर

24
इस तरह

:

Type t; 
Type genericListType = typeof(List<>).MakeGenericType(t); 
object list = Activator.CreateInstance(genericListType); 

नोट है कि आप केवल प्रकार object के एक चर को असाइन कर सकें। (हालांकि आप गैर-जेनेरिक IList इंटरफ़ेस पर जा सकते हैं)

list चर का उपयोग करने के लिए, आपको शायद प्रतिबिंब की आवश्यकता होगी।

+1

+1 नहीं पता था 'सूची <>' बिल्कुल कानूनी थी। बहुत अच्छा। –

+1

@Igot: केवल 'टाइपोफ़' में। – SLaks

+0

यह बहुत अच्छा काम करता है, सिवाय इसके कि बाद में इसका उपयोग करना दर्द होता है। हालांकि काम पूरा हो जाता है। – captncraig

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