在C#4.0中使用默认值反映构造函数

在C#4.0中使用默认值反映构造函数,c#,reflection,c#-4.0,default-value,C#,Reflection,C# 4.0,Default Value,我刚刚开始使用C#4.0(RC)并提出了以下问题: 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)

我刚刚开始使用C#4.0(RC)并提出了以下问题:

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);
}
class Class1{public Class1(){}
类Class2{public Class2(字符串参数1){}
类Class3{public Class3(string param1=“default”){}
类型[]类型=新类型[]{typeof(Class1)、typeof(Class2)、typeof(Class3)};
//问题从这里开始,主要方法
for(int i=0;i
请注意,我从未尝试过这段实际代码,但我只是查看了在VS2010中使用调试执行GetConstructor的结果


这非常适合前两个类(1和2),第一个类打印Class1的无参数构造函数的实际ConstructorInfo对象名称,第二个类打印null。但是,第三个问题出现了,因为我真正想要的不是知道它是否需要0个参数,而是我是否可以创建一个没有任何参数的类实例。我该怎么做呢?

我找到了一种方法。虽然不漂亮,但很管用

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