c# - 在 C#4.0 中使用默认值反射(reflect)构造函数

标签 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) };

// 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/

相关文章:

c# - C# 中的 System.Type 和 System.RuntimeType 有什么区别?

c# - 在 Rotativa 生成的 PDF 中显示页眉和页脚

c# - 输出仅取决于输入和对象状态的方法的名称是什么?

c# - c#中如何获取当前执行方法的输出参数列表?

c# - 从结构的常量属性中获取值的集合

c# - 在类级别定义的 private const 然后在属性上使用,为什么会编译?

c# - 字符串未被识别为有效的日期时间

c# - C#控制台应用程序,无法隐式将 'double'类型转换为 'string'吗?

c# - 使用 CL NUI Kinect 驱动程序,将深度颜色转换为实际相对距离

jquery - 美国电话号码 (000)-000-0000 或 000-000-0000 的 MVC 验证