如果将多个属性应用于成员,例如
[Foo]
[Bar]
void Baz() { ... }
那么CLR / .NET规范是否保证在通过反射检索时将检索它们的顺序(例如Attribute.GetCustomAttributes
)?这些方法的文档没有明确说明,虽然它们的确按照它们应用的顺序返回,但我不想依赖于未记录的行为,因为它只是在寻找麻烦。
至于为什么这可能很重要,想象一下这些属性用于表示该方法应该有一系列拦截器,这些拦截器应按特定顺序运行。
答案 0 :(得分:12)
不是来自17.2 Attribute specification它似乎不是这样。
属性的顺序 在这样的清单中指定,和 附加到哪些部分的顺序 安排了相同的计划实体, 并不重要。例如, 属性规范[A] [B], [B] [A],[A,B]和[B,A]是 等效。
答案 1 :(得分:4)
依靠订购这类东西通常是一个坏主意。如果订单很重要,我会给属性一个Priority属性,以便它可以非常明确。
我不知道有任何保证会按原始顺序检索它们。
答案 2 :(得分:1)
imo属性不应该有顺序,因为它们不是流控制结构。
我猜你可以在属性中添加一个优先级属性,然后用它来确定运行顺序吗?