3

如何在程序集中找到每次出现的自定义属性?

如果可以从使用该属性的程序集中找到所有类型,但这还不够。方法、属性、枚举、枚举值、字段等怎么样?

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

反射器这样做,但不确定它是如何实现的。

4

2 回答 2

11

做,

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

这也将返回enum值,因为这些只是底层的公共静态字段。此外,如果您想要私人成员,则必须调整BindingFlags您传入的内容。

于 2010-08-18T13:46:34.090 回答
1

您可以使用Type.GetMembers()来获取所有成员(属性、方法、字段等),而不是单独执行每种成员。这至少应该使它更简单一些。

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

于 2010-08-18T13:40:27.200 回答