2010-03-09 44 views
5

我使用C#4.0(RC)纔剛起步,並想出了這個問題,默認值的構造函數:反映在C#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),第一個打印的參數的構造函數的實際ConstructorInfo對象的名字Class1,第二個打印爲空。但是,第三個問題出現了,因爲我真正想要的不是知道它是否需要0參數,而是我是否可以在不帶任何參數的情況下創建該類的實例。我怎麼做?

回答

2

我找到了一個辦法。它不漂亮,但它的工作原理。

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