2010-03-09 12 views
5

मैं सिर्फ सी # 4.0 (आरसी) का उपयोग शुरू किया और इस समस्या को लेकर आए हैं में मूलभूत मूल्यों के साथ कंस्ट्रक्टर को दर्शाते हुए:सी # 4.0

class Class1 { public Class1() { } } 
class Class2 { public Class2(string param1) { } } 
class Class3 { public Class3(string param1 = "default") { } } 

Type[] types = new Type[] { typeof(Class1), typeof(Class2), typeof(Class3) }; 

// Problem starts here, main-method 
for(int i = 0; i < types.Length; i++) 
{ 
    ConstructorInfo ctr = provider.GetConstructor(Type.EmptyTypes); 
    Console.WriteLine(ctr == null ? "null" : ctr.Name); 
} 

ध्यान दें, मैं इस वास्तविक कोड की कोशिश की कभी नहीं किया है, लेकिन मैं सिर्फ VS2010 में डीबगिंग का उपयोग करने GetConstructor करने का परिणाम देखा है

यह दो पहले कक्षाओं के लिए एकदम सही है (1 और 2), पहले एक की parameterless निर्माता का एक वास्तविक ConstructorInfo-वस्तु का नाम प्रिंट कक्षा 1, दूसरा प्रिंट शून्य। हालांकि, समस्या तीसरे के साथ उत्पन्न होती है, क्योंकि जो मैं वास्तव में चाहता हूं उसे यह नहीं पता कि यह 0 पैरामीटर लेता है या नहीं, लेकिन यह है कि मैं किसी भी पैरामीटर के बिना कक्षा का उदाहरण बना सकता हूं। मैं उसको कैसे करू?

उत्तर

2

मुझे ऐसा करने का कोई तरीका मिला। यह सुंदर नहीं है लेकिन यह काम करता है।

var ctrs = from c in provider.GetConstructors() 
      where c.GetParameters().Where(p => !p.IsOptional).Count() == 0 
      select c; 
ConstructorInfo ctr = ctrs.FirstOrDefault();