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

Han*_*ant 163 .net c# reflection

受到SO问题的启发.Attribute类对IsDefined()方法有几个重载.涵盖的是应用于Assembly,Module,MemberInfo,ParameterInfo的属性.MemberInfo重载包括PropertyInfo,FieldInfo,EventInfo,MethodInfo,ConstructorInfo.

这需要处理大多数AttributeTargets.除了一个biggy:Attribute.IsDefined(Type,Type)没有重载,因此您可以检查是否在类上定义了属性.或者结构,委托或枚举.

并非这是一个真正的问题,Type.GetCustomAttributes()可以解决这个问题.但是所有的BlahInfo类型都有这个.我不知道缺乏对称性.我无法理解为什么这对Type来说会有问题.猜测遗传问题并没有向我解释.在混合中使用ValueType可能是一个领先者,但仍然没有意义.我不买"他们忘了",他们从不这样做.

为什么这个过载丢失了?

Joh*_*ren 169

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

程序集是任何.NET程序集的顶级容器,具有一个或多个模块.然后每个模块包含类型和类型,可以包含属性,方法甚至其他类型(嵌套类型)等成员.这就是为什么System.Type派生MemberInfo所以对象模型允许类型作为容器所有成员,包括其他类型.