2011-10-12 45 views
3

我想将枚举列表传递给我的Attribute属性。但是,您可以将List传递给Attribute的属性。所以,我试图将其转换为字符串表示,并试图做这样的事情:属性错误:属性参数必须是常量表达式,typeof表达式或属性参数类型的数组创建表达式

[MyAtt(Someproperty = 
      Enums.SecurityRight.A.ToString() + "&" + (Enums.SecurityRight.B.ToString()))] 

然而,这给出了错误:“的属性参数必须是常量表达式,属性参数的typeof表达式或数组创建表达式键入“

我知道你只能通过常量。但是我怎么逃避这个呢?任何技巧?

谢谢。

+1

重复http://stackoverflow.com/questions/270187/can-i-initialize-a-c-attribute-with-an-array-or-other-variable-number-of-argumen –

+0

谢谢亚当。它解决了我的问题 – Jaggu

回答

7

如果我的C#编码关闭,请原谅我。我使用VB。

您可以使用const值。

namespace Enums { 
    static class SecurityRight { 
     const String A = "A"; 
     const String B = "B"; 
    } 
} 

[MyAtt(StringProperty = Enums.SecurityRight.A + "&" + Enums.SecurityRight.B)] 

如果属性接受相同的数据类型枚举可以使用一个enum

namespace Enums { 
    [Flags()] 
    enum int SecurityRight { 
     A = 1; 
     B = 2; 
    } 
} 

[MyAtt(IntegerProperty = Enums.SecurityRight.A | Enums.SecurityRight.B)] 

编辑:更改IntegerProperty上述接收多个值。

属性在编译时设置,而不是在运行时设置。通过使用ToString,您正在调用运行时使用的代码。你必须使用一个常数值。

+0

好,但不是我正在寻找的东西。我正在寻找使用枚举的第二种方法。我想在1个属性中发送2枚枚举。但你只送了一个。 [MyAtt(IntegerProperty = Enums.SecurityRight.A)] – Jaggu

+0

这是如何允许将值列表传递给属性的? –

+0

@Jaggu,如果你想发送他们作为一个字符串,你必须键入他们作为字符串或找到其他方式,不涉及函数调用。如果您想将组合值作为数字发送,可以使用'Enum.A | Enum.B'。 –

相关问题