为什么GetCustomAttributes返回object []而不是Attribute []?

Che*_*hen 8 .net c# reflection attributes

只是好奇,看MemberInfo.GetCustomAttributes.是否暗示它可能包含非属性对象?

Ree*_*sey 8

这是因为CLI规范不强制从Attribute派生属性.

II部分第21页(第225页)中的规范指出:

虽然任何用户定义的类型都可以用作属性,但CLS合规性要求属性将是基类为System.Attribute的类型的实例.CLI预定义了一些属性类型,并使用它们来控制运行时行为.某些语言预定义属性类型以表示未在CTS中直接表示的语言特征.欢迎用户或其他工具定义和使用其他属性类型.

基本上,CLR本身不能保证结果将是属性 - 这仅适用于符合CLS的语言.非CLS兼容的语言都不允许有任何类型的属性whic意味着ICustomAttributeProvider.GetCustomAttributes(这是有问题的实现的接口),需要提供一种机制,让非衍生属性的属性.