एक जेनेरिक <T> प्रकार के प्रकार के साथ एक चर बनाने के उदाहरण


85

क्या निम्नलिखित कोड प्राप्त करना संभव है? मुझे पता है कि यह काम नहीं करता है, लेकिन अगर कोई वर्कअराउंड है तो मैं सोच रहा हूं?

Type k = typeof(double);
List<k> lst = new List<k>();

आपकी टिप्पणी से थोड़ा भ्रमित "यह C # 4.0 में पूरा किया जा सकता है।" यह कम से कम आप इसे दिखाने के तरीके से नहीं कर सकते। C # 4 को अभी भी संकलन के समय सामान्य प्रकार के मापदंडों को निर्दिष्ट करने की आवश्यकता है; आप अभी भी एक प्रकार के चर को जेनेरिक प्रकार के पैरामीटर के रूप में पारित नहीं कर सकते हैं।
itowlson

1
कृपया प्रश्न के रूप में चीजों को वाक्यांश दें जब यह प्रश्न हो। निर्दिष्ट कोड को C # 4.0 के साथ पूरा नहीं किया जा सकता है।
लास वी। कार्लसन

1
इसी तरह के सवाल: stackoverflow.com/questions/687363/…
Zach Johnson

C # 4.0 चीज़ के बारे में क्षमा करें। मेरा मतलब था कि उत्तर C # 4.0 में अवधारणाओं का उपयोग कर सकता है, जरूरी नहीं कि कोड C # 4.0 में काम करेगा। DrJokepu के संपादन के लिए धन्यवाद।
क्रिस

12
मुझे लगता है कि यह सवाल पूरी तरह से कहा गया है - बस सही मात्रा में विस्तार!
रनहॉल

जवाबों:


119

हाँ वहाँ है:

var genericListType = typeof(List<>);
var specificListType = genericListType.MakeGenericType(typeof(double));
var list = Activator.CreateInstance(specificListType);

मुझे लगता है कि मुझे यही चाहिए। मुझे दोबारा जांचने दें और मैं आपको उत्तर के रूप में क्षण भर में चिह्नित करूंगा।
क्रिस

3
मुझे लगता है कि यहाँ मुख्य समस्या यह है कि आप इसका वर्णन नहीं करते हैं कि आप हमसे क्या चाहते हैं । आप हमें किसी चीज़ में असफल प्रयास दिखाते हैं और फिर पूछते हैं कि आप क्या चाहते हैं । यदि आप उत्तर चाहते हैं, और अनुमान नहीं लगाते हैं, तो आपको यह वर्णन करना चाहिए कि आपको क्या करने की आवश्यकता है, बजाय इसके कि आपने इसे करने का प्रयास कैसे किया।
लास वी। कार्लसन

मैं मूल रूप से एक सूची बनाना चाहता हूं <> जहां प्रकार एक प्रकार चर के रूप में निर्दिष्ट किया गया है।
क्रिस

3
धन्यवाद डेविड एम, आपका कोड वही करता है जो मुझे चाहिए था। उन लोगों के लिए क्षमा करें जो उत्तर देने में असमर्थ थे क्योंकि मैंने पर्याप्त प्रश्न नहीं दिया था।
क्रिस

क्या जेनेरिक विधियों के लिए समवे करना संभव है? मुझे विधि के लिए गतिशील प्रकार पास करने की आवश्यकता है, मैंने नीचे दिए गए लिंक stackoverflow.com/questions/4101784/…
मथियाझगन

3

एक क्लीनर तरीका एक सामान्य विधि का उपयोग करने के लिए हो सकता है। कुछ इस तरह से करें:

static void AddType<T>()
    where T : DataObject
{
    Indexes.Add(typeof(T), new Dictionary<int, T>());
}

मुझे यकीन नहीं है कि "इंडेक्स" से आपका क्या मतलब है, यह एक चर कहीं और घोषित किया गया है?
jrh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.