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

Alx*_*ndr 5 c# reflection default-value c#-4.0

我刚开始使用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);
}
Run Code Online (Sandbox Code Playgroud)

注意,我从来没有尝试过这个实际的代码,但我刚刚看了VS2010中使用调试来执行GetConstructor的结果

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

Alx*_*ndr 2

我找到了一种方法来做到这一点。它不漂亮,但很有效。

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