2011-10-12 46 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'。 –

相關問題