2011-06-20 19 views
54

मुझे एक जेनेरिक क्लास मिला है, जहां मैं सामान्य प्रकार के साथ ऑब्जेक्ट को चालू करना चाहता हूं। मैं इस प्रकार के निर्माता के लिए एक तर्क का उपयोग करना चाहता हूं।सी # में जेनिक्स - मैं तर्क के साथ एक चर प्रकार का उदाहरण कैसे बना सकता हूं?

मेरे कोड:

public class GenericClass<T> where T : Some_Base_Class, new() 
{ 
    public static T SomeFunction(string s) 
    { 
     if (String.IsNullOrEmpty(s)) 
      return new T(some_param); 
    } 
} 

मैं

new T(some_param) 

'टी' पर एक त्रुटि प्राप्त: जब एक चर प्रकार का उदाहरण बनाकर तर्क प्रदान नहीं कर सकते

कोई विचार कैसे क्या मैं यह कर सकता हूं?

+0

आप इस अक्सर कर रही करने के लिए जा रहे हैं? सी # का संस्करण क्या है? –

+0

[यह] (http://stackoverflow.com/questions/840261/c-generic-new-constructor-problem/840299#840299) सबसे अच्छा कामकाज है जिसे मैं ढूंढने में सक्षम हूं .... –

+0

एक और तरीका है 'Some_Base_Class' पर सार्वजनिक संपत्ति बनाने के लिए, और फिर आप निम्न कार्य कर सकते हैं:' नया टी() {SomeProperty = "value"} ' – nZeus

उत्तर

85

Activator.CreateInstance पर एक नज़र डालें। उदाहरण के लिए:

var instance = Activator.CreateInstance(typeof(T), new object[] { null, null }); 

जाहिर प्रकार के निर्माताओं में से एक ने उम्मीद उचित मूल्यों के साथ null रों की जगह।

आप cannot convert object to type T के बारे में एक संकलक त्रुटि मिलती है, तो as T में शामिल हैं:

var instance = Activator.CreateInstance(typeof(T), 
        new object[] { null, null }) as T; 
+0

यह सही तरीका है, ठीक है। –

+0

बिल्कुल सही! बहुत धन्यवाद! :) – Roman

+0

यह अच्छी तरह से काम करेगा, हालांकि यह धीमा है और अच्छा विकल्प नहीं है यदि आपको एक ही ऑब्जेक्ट प्रकार को कई बार बनाना है। –

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