受一个SO问题的启发。Attribute类有几个IsDefined()方法的重载。涵盖了应用于Assembly、Module、MemberInfo、ParameterInfo的属性。MemberInfo的重载涵盖了PropertyInfo、FieldInfo、EventInfo、MethodInfo、ConstructorInfo。
这就照顾了大多数的AttributeTargets。除了一个很大的问题:没有Attribute.IsDefined(Type,Type)的重载,因此您可以检查类上是否定义了属性。或者说,结构体、委托或枚举。
虽然这不是真正的问题,但Type.GetCustomAttributes()可以解决这个问题。但是所有的BlahInfo类型也都有这个问题。我想知道为什么缺乏对称性。我无法确定为什么这会对Type造成问题。猜测继承问题不能为我解释这一点。在混合中加入ValueType可能是一个线索,但仍然没有意义。我不相信“他们忘了”,他们从来没有。
为什么缺少这种重载?
ICustomAttributeProvider
的重载也是非常有意义的。 - Mr Anderson