क्या यह देखना संभव है कि कौन सा कन्स्ट्रक्टर सामान्य था?जेनेरिक कन्स्ट्रक्टर और प्रतिबिंब
internal class Foo<T>
{
public Foo(T value) {}
public Foo(string value) {}
}
var constructors = typeof(Foo<string>).GetConstructors();
संपत्ति 'कंटेनस जेनरिक पैरामीटर' दोनों मुझे रचनाकारों के लिए झूठी रिटर्न देता है। क्या यह पता लगाने का कोई तरीका है कि रचनाकार [0] सामान्य है? दोनों के पास एक ही हस्ताक्षर है, लेकिन मैं "वास्तविक" स्ट्रिंग को कॉल करना चाहता हूं।
संपादित करें:
मैं दिया प्रकार का उपयोग
ilGen.Emit(OpCodes.Newobj, constructorInfo);
तो मैं बाध्य संस्करण के साथ काम करने की जरूरत आह्वान करने के लिए चाहते हैं। लेकिन मैं "सर्वश्रेष्ठ" कन्स्ट्रक्टर का आह्वान करना चाहता हूं। यह मानक व्यवहार होना चाहिए। जब मैं
new Foo<string>()
निर्माता फोन स्ट्रिंग हस्ताक्षर (और नहीं सामान्य हस्ताक्षर के साथ एक) के साथ कहा जाता है। मेरे कोड के साथ भी ऐसा ही होना चाहिए।
आपके उत्तर के लिए धन्यवाद - यहां समस्या यह है कि आप "टाइप टी = टाइपोफ (फू <>);" - यह अब टाइप नहीं करेगा "टाइप टी = टाइपोफ (फू);" –
tanascius
इसे Foo <> पर प्राप्त करने के लिए GetGenericTypeDefinition() पर कॉल करें, फिर कन्स्ट्रक्टर इंडेक्स अभी भी उसी कन्स्ट्रक्टर को मैप करें। तो आप सही इंडेक्स को खोजने के लिए Foo <> .. ctor पर प्रतिबिंबित कर सकते हैं, फिर अपने आईएल जनरेटर से मिलान Foo ..क्टर का उपयोग करें। जहां तक मैं आपको बता सकता हूं कि जब आप Foo के साथ जाते हैं तो आप सभी जेनेरिक-नेस खो देते हैं। –
GetGenericTypeDefinition() बिल्कुल वही था जो मैंने याद किया था। आपका बहुत बहुत धन्यवाद! – tanascius