我刚开始使用 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 个参数,而是我是否可以创建一个没有任何参数的类的实例。我该怎么做?
最佳答案
我找到了一种方法。它不是很漂亮,但很管用。
var ctrs = from c in provider.GetConstructors()
where c.GetParameters().Where(p => !p.IsOptional).Count() == 0
select c;
ConstructorInfo ctr = ctrs.FirstOrDefault();
关于c# - 在 C#4.0 中使用默认值反射(reflect)构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2413459/