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

5

我刚开始使用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);
}

注意,我从未尝试过这段实际代码,但我仅仅查看了在VS2010中使用调试时GetConstructor的结果

对于前两个类(1和2)来说,这非常完美。第一个打印Class1的无参构造函数的实际ConstructorInfo对象名称,第二个则打印null。然而,第三个类存在问题,因为我真正想知道的不是它是否需要0个参数,而是我能否在没有任何参数的情况下创建该类的实例。我该如何做?

1个回答

2
我找到了一种方法。虽然不太美观但是它能够运行。
var ctrs = from c in provider.GetConstructors()
           where c.GetParameters().Where(p => !p.IsOptional).Count() == 0
           select c;
ConstructorInfo ctr = ctrs.FirstOrDefault();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接