考虑这样一种情况,即程序集包含一个或多个具有自定义属性的类型,MyAttribute
并且您需要获取这些类型的列表。除了更紧凑的语法之外,使用IsDefined与GetCustomAttributes有什么好处吗?一个人是否暴露/隐藏了另一个人没有的东西?一个比另一个更有效吗?
这是一个演示每种用法的代码示例:
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;