为什么 Attributes.IsDefied()缺少重载?

受一个 SO 问题的启发。Attribute 类对于 被定义()方法有几个重载。介绍了应用于 Assembly、 Module、 MemberInfo 和 Parameter terInfo 的属性。MemberInfo 重载包括 PropertyInfo、 FieldInfo、 EventInfo、 MethodInfo、 Construction torInfo。

它处理了大部分 AttributeTarget。除了一个大问题: Attribute.IsDefied (Type,Type)没有重载,因此您可以检查是否在类上定义了属性。或者结构、委托或枚举。

不是说这是个真正的问题 Type。GetCustomAttributes()可以解决这个问题。但 BlahInfo 的所有类型都有这个。我对缺乏对称感到惊讶。我不知道为什么这会成为 Type 的问题。猜测遗产问题并不能解释这一切。混合使用 ValueType 可能是一种优势,但仍然没有意义。我不相信“他们忘了”,他们从不相信。

为什么这个过载不见了?

8538 次浏览

有一个 System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit)System.Type衍生自 System.Reflection.MemberInfo

程序集,它是任何。NET 程序集具有一个或多个模块。然后,每个模块都包含类型,类型可以包含属性、方法甚至其他类型(嵌套类型)等成员。这就是为什么 System.TypeMemberInfo派生出来,因此对象模型允许类型作为容器工作,所有事物成员,包括其他类型。