当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《获取Type的默认构造函数的最有效方法》经验,为你挑选了2个好方法。

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

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

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

Curt Hagenlo.. 129

type.GetConstructor(Type.EmptyTypes)

在使用MeasureIt(http://msdn.microsoft.com/en-us/magazine/cc500596.aspx)测量此方法与我的方法之后,除了最简单的情况之外,这种方法速度更快,即便如此,它也几乎没有变慢.所以这是最简单也是最快的.谢谢! (7认同)

你永远不会看到的静态成员......这太棒了. (6认同)

但不使用PCL和`.Net Standard 1.4-` (2认同)


Alex Lyman.. 29

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

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



1> Curt Hagenlo..:
type.GetConstructor(Type.EmptyTypes)


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

2> Alex Lyman..:

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

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


有潜在危险的建议,因为某些对象没有默认构造函数(String为1).因此,如果您只是不耐烦地调用它,您最终可能会遇到MissingMethod异常.我实际上必须在调用此方法之前检查默认构造函数.
推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有