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个参数,但是我是否可以创建一个没有任何参数的类的实例.我怎么做?
我找到了一种方法来做到这一点。它不漂亮,但很有效。
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)