使用自定义属性获取程序集中的所有类型

发布于 2024-10-15 01:23:27 字数 219 浏览 7 评论 0原文

有没有一种优雅的方法来获取程序集中具有自定义属性的所有类型?

因此,如果我有一个类,

[Findable]
public class MyFindableClass
{}

我希望能够在 Assembly.GetTypes(...) 返回的类型集合中找到它,

我可以通过一个大的卑鄙黑客来做到这一点,但我确信有人有更好的方法。

Is there an elegant way to get all the types in an assembly that have a custom attribute?

So if I have a class

[Findable]
public class MyFindableClass
{}

I would like to be able to find it in a collection of types returned by Assembly.GetTypes(...)

I can do it with a big vile hack, but I'm sure someone has a nicer way.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷雾森÷林ヴ 2024-10-22 01:23:27

我不认为您可以回避枚举程序集中的每种类型,检查属性,但您可以使用 LINQ 使查询更易于理解:

Assembly assembly = ...
var types = from type in assembly.GetTypes()
            where Attribute.IsDefined(type, typeof(FindableAttribute))
            select type;

编辑:从 MemberInfo.GetCustomAttributes 移至 Attribute.IsDefined 基于 Marc Gravell 的建议。

I wouldn't think you can dodge enumerating every type in the assembly, checking for the attribute, but you could use LINQ to make the query easier to understand:

Assembly assembly = ...
var types = from type in assembly.GetTypes()
            where Attribute.IsDefined(type, typeof(FindableAttribute))
            select type;

EDIT: Moved from MemberInfo.GetCustomAttributes to Attribute.IsDefined based on Marc Gravell's suggestion.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文