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

时间:2010-02-11 11:48:38

标签: .net attributes

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

[Foo]
[Bar]
void Baz() { ... }

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

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

3 个答案:

答案 0 :(得分:12)

不是来自17.2 Attribute specification它似乎不是这样。

  

属性的顺序   在这样的清单中指定,和   附加到哪些部分的顺序   安排了相同的计划实体,   并不重要。例如,   属性规范[A] [B],   [B] [A],[A,B]和[B,A]是   等效。

答案 1 :(得分:4)

依靠订购这类东西通常是一个坏主意。如果订单很重要,我会给属性一个Priority属性,以便它可以非常明确。

我不知道有任何保证会按原始顺序检索它们。

答案 2 :(得分:1)

imo属性不应该有顺序,因为它们不是流控制结构。

我猜你可以在属性中添加一个优先级属性,然后用它来确定运行顺序吗?