受到SO问题的启发。 Attribute类对IsDefined()方法有几个重载。涵盖的是应用于Assembly,Module,MemberInfo,ParameterInfo的属性。 MemberInfo重载包括PropertyInfo,FieldInfo,EventInfo,MethodInfo,ConstructorInfo。
负责大多数AttributeTargets。除了一个biggy:Attribute.IsDefined(Type,Type)没有重载,因此您可以检查是否在类上定义了属性。或者结构,委托或枚举。
并非这是一个真正的问题,Type.GetCustomAttributes()可以解决这个问题。但是所有的BlahInfo类型都有这个。我不知道缺乏对称性。我无法理解为什么这对Type来说会有问题。猜测遗传问题并没有向我解释。在混合中使用ValueType可能是一个领先者,但仍然没有意义。我不买“他们忘了”,他们从不这样做。
为什么这个过载丢失了?
答案 0 :(得分:169)
System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit)
和System.Type
来自System.Reflection.MemberInfo
。
程序集是任何.NET程序集的顶级容器,它有一个或多个模块。然后每个模块包含类型和类型,可以包含属性,方法甚至其他类型(嵌套类型)等成员。这就是为什么System.Type
派生自MemberInfo
的原因,以便对象模型允许类型作为所有成员的容器,包括其他类型。