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

167

受一个SO问题的启发。Attribute类有几个IsDefined()方法的重载。涵盖了应用于Assembly、Module、MemberInfo、ParameterInfo的属性。MemberInfo的重载涵盖了PropertyInfo、FieldInfo、EventInfo、MethodInfo、ConstructorInfo。

这就照顾了大多数的AttributeTargets。除了一个很大的问题:没有Attribute.IsDefined(Type,Type)的重载,因此您可以检查类上是否定义了属性。或者说,结构体、委托或枚举。

虽然这不是真正的问题,但Type.GetCustomAttributes()可以解决这个问题。但是所有的BlahInfo类型也都有这个问题。我想知道为什么缺乏对称性。我无法确定为什么这会对Type造成问题。猜测继承问题不能为我解释这一点。在混合中加入ValueType可能是一个线索,但仍然没有意义。我不相信“他们忘了”,他们从来没有。

为什么缺少这种重载?

1个回答

173

有一个 System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit) 方法,而 System.Type 派生自 System.Reflection.MemberInfo

一个程序集是任何 .NET 程序集的最高级容器,它包含一个或多个模块。每个模块包含类型,类型可以拥有成员如属性、方法或者其他类型(嵌套类型)。因此,System.Type 派生自 MemberInfo,以便对象模型允许类型作为容器来管理所有成员,包括其他类型。


ICustomAttributeProvider 的重载也是非常有意义的。 - Mr Anderson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接