考虑一种情况,即程序集包含一个或多个具有自定义属性MyAttribute的属性,并且您需要获取这些类型的列表。除了使用更紧凑的语法之外,使用IsDefinedGetCustomAttributes还有什么好处?一个人是否暴露/隐藏其他人没有的东西?一个比另一个更有效吗?

这是演示每种用法的代码示例:

Assembly assembly = ...
var typesWithMyAttributeFromIsDefined =
        from type in assembly.GetTypes()
        where type.IsDefined(typeof(MyAttribute), false)
        select type;

var typesWithMyAttributeFromGetCustomAttributes =
        from type in assembly.GetTypes()
        let attributes = type.GetCustomAttributes(typeof(MyAttribute), false)
        where attributes != null && attributes.Length > 0
        select type;

最佳答案

使用这两种方法进行了快速测试,看来IsDefinedGetCustomAttributes快很多

200000次迭代

IsDefined average Ticks = 54
GetCustomAttributes average Ticks = 114

希望这可以帮助 :)

09-30 23:34