受SO问题启发。Attribute类具有IsDefined()方法的多个重载。涵盖了应用于程序集,模块,成员信息,参数信息的属性。MemberInfo重载涵盖PropertyInfo,FieldInfo,EventInfo,MethodInfo,ConstructorInfo。
这将处理大多数AttributeTargets。除了一个缺点:Attribute.IsDefined(Type,Type)没有重载,因此您可以检查是否在类上定义了属性。或针对此问题的结构,委托或枚举。
并不是说这是一个真正的问题,Type.GetCustomAttributes()可以解决此问题。但是所有的BlahInfo类型也都具有此功能。我不知道缺乏对称性。我无法确定为什么这会对Type造成问题。猜测继承问题并不能向我解释。混合使用ValueType可能会领先,但这仍然没有意义。我不买“他们忘了”,他们从来不买。
为什么这种超载丢失了?
ICustomAttributeProvider
也很有意义。