2010-08-18 73 views
3

如何在程序集中查找每个出现的自定义属性?如何在程序集中查找所有出现的自定义属性?

如果可以从使用该属性的组件中找到所有类型,但这些不够用。如何方法,属性,枚举,枚举值,字段等

有没有这样做的任何捷径,或者是唯一的方法来做它来编写代码来搜索类型的所有部分(属性,字段,方法等)?

反射器做到这一点,不知道它如何实现。

回答

11

做的,

assembly.GetTypes() 
    .SelectMany(type => type.GetMembers()) 
    .Union(assembly.GetTypes()) 
    .Where(type => Attribute.IsDefined(type, attributeType)); 

这将返回enum值也因为这些是引擎盖下只是公共静态字段。另外,如果你想私人会员,你必须调整你通过的BindingFlags

1

您可以使用Type.GetMembers()获取所有成员(属性,方法,字段等),而不是分别执行每种类型的成员。这至少应该让它变得更简单。

请注意,您可能希望传入各种绑定标志(实例,静态,公共,非公共)以确保您捕捉到所有内容。

+0

我也可以获得枚举值吗?不是枚举本身,而是价值观? – Marcus 2010-08-18 13:41:20

+0

@Marcus,枚举是类型,所以你需要首先使用GetTypes方法获取程序集中的所有类型,然后在每个类型上应用GetMembers方法。您将需要两个嵌套循环。 – 2010-08-18 13:42:04

+0

@Marcus:GetMembers()将返回字段,并且枚举类型的值是字段。 – 2010-08-18 13:43:16

相关问题