获取Type的默认构造函数的最有效方法

Wes*_*ard 70 .net c# reflection

获取System.Type的默认构造函数(即没有参数的实例构造函数)的最有效方法是什么?

我正在考虑下面的代码,但似乎应该有一个更简单,更有效的方法来做到这一点.

Type type = typeof(FooBar)
BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
type.GetConstructors(flags)
    .Where(constructor => constructor.GetParameters().Length == 0)
    .First();
Run Code Online (Sandbox Code Playgroud)

Cur*_*her 129

type.GetConstructor(Type.EmptyTypes)
Run Code Online (Sandbox Code Playgroud)

  • 在使用MeasureIt(http://msdn.microsoft.com/en-us/magazine/cc500596.aspx)测量此方法与我的方法之后,除了最简单的情况之外,这种方法速度更快,即便如此,它也几乎没有变慢.所以这是最简单也是最快的.谢谢! (7认同)
  • 你永远不会看到的静态成员......这太棒了. (6认同)
  • 但不使用PCL和`.Net Standard 1.4-` (2认同)

Ale*_*man 29

如果您确实需要 ConstructorInfo对象,请参阅Curt Hagenlocher的回答.

在另一方面,如果你真的只是想创建从一个运行时的对象System.Type,看System.Activator.CreateInstance-它不只是未来需求(活化处理比更多的细节ConstructorInfo.Invoke),这也是很多丑陋的少.

  • 有潜在危险的建议,因为某些对象没有默认构造函数(String为1).因此,如果您只是不耐烦地调用它,您最终可能会遇到MissingMethod异常.我实际上必须在调用此方法之前检查默认构造函数. (2认同)