如何在程序集中找到每次出现的自定义属性?
如果可以从使用该属性的程序集中找到所有类型,但这还不够。方法、属性、枚举、枚举值、字段等怎么样?
是否有任何捷径可以做到这一点,或者是编写代码来搜索类型的所有部分(属性、字段、方法等)的唯一方法?
反射器这样做,但不确定它是如何实现的。
如何在程序集中找到每次出现的自定义属性?
如果可以从使用该属性的程序集中找到所有类型,但这还不够。方法、属性、枚举、枚举值、字段等怎么样?
是否有任何捷径可以做到这一点,或者是编写代码来搜索类型的所有部分(属性、字段、方法等)的唯一方法?
反射器这样做,但不确定它是如何实现的。
做,
assembly.GetTypes()
.SelectMany(type => type.GetMembers())
.Union(assembly.GetTypes())
.Where(type => Attribute.IsDefined(type, attributeType));
这也将返回enum
值,因为这些只是底层的公共静态字段。此外,如果您想要私人成员,则必须调整BindingFlags
您传入的内容。
您可以使用Type.GetMembers()
来获取所有成员(属性、方法、字段等),而不是单独执行每种成员。这至少应该使它更简单一些。
请注意,您可能希望传入各种绑定标志(实例、静态、公共、非公共)以确保您捕获所有内容。