属性的顺序是否有任何保证?

Gre*_*ech 10 .net attributes

如果将多个属性应用于成员,例如

[Foo]
[Bar]
void Baz() { ... }
Run Code Online (Sandbox Code Playgroud)

那么CLR/.NET规范是否保证在通过反射检索它们时将检索它们的顺序(例如Attribute.GetCustomAttributes)?这些方法的文档并没有明确说明,虽然它们似乎是按照它们应用的顺序返回的,但我不想依赖于未记录的行为,因为它只是在寻找麻烦.

至于为什么这可能很重要,想象一下这些属性用于表示该方法应该有一系列拦截器,这些拦截器应该以特定的顺序运行.

Adr*_*der 14

17.2属性规范来看,它似乎并非如此.

在这样的列表中指定属性的顺序,以及附加到同一程序实体的部分的顺序并不重要.例如,属性规范[A] [B],[B] [A],[A,B]和[B,A]是等价的.


Jon*_*eet 6

依靠订购这种东西通常是一个坏主意。如果顺序很重要,则可以给该属性一个Priority属性,以便可以使其非常明确。

我不知道有任何保证可以按照原始顺序进行检索。