本文介绍了使用 IsDefined 而不是 GetCustomAttributes 有什么好处吗的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

考虑一个程序集包含一个或多个类型的情况,该类型具有自定义属性MyAttribute,并且您需要获取这些类型的列表.使用 IsDefined vs. GetCustomAttributes 除了更紧凑的语法?一个人是否暴露/隐藏了另一个人没有的东西?一个比另一个更有效吗?

Consider the case where an assembly contains one or more types attributed with a custom attribute MyAttribute and you need to get a list of these types. Is there any benefit of using IsDefined vs. GetCustomAttributes aside from the more compact syntax? Does one expose/hide something that the other doesn't? Is one more efficient than the other?

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

Here is a code sample demonstrating each usage:

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 快很多

Done a quick test with the two methods and it seems IsDefined is a lot faster than GetCustomAttributes

200000 次迭代

IsDefined average Ticks = 54
GetCustomAttributes average Ticks = 114

希望这会有所帮助:)

这篇关于使用 IsDefined 而不是 GetCustomAttributes 有什么好处吗的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-20 22:24