2015-10-08 77 views
1

我已經定義了一個自定義enumDescriptionAttribute(見我剛纔的問題:Multiple enum descriptions自定義屬性:屬性參數必須是常量表達式

public class DescriptionWithValueAttribute : DescriptionAttribute 
{ 
    public Decimal Value { get; private set; } 

    public DescriptionWithValueAttribute(String description, Decimal value) 
     : base(description) 
    { 
     Value = value; 
    } 
} 

enum看起來是這樣的:

public enum DeviceType 
{ 
    [DescriptionWithValueAttribute("Set Top Box", 9.95m)] 
    Stb = 1, 
} 

我編譯時出現以下錯誤:

An屬性參數必須是常量表達式,屬性參數類型

我也已經嘗試的typeof運算表達 或數組創建表達式:[DescriptionWithValueAttribute("Set Top Box", (Decimal)9.95)]

任何想法?

+1

小數不能用作屬性參數。請參閱http://stackoverflow.com/questions/507528/use-decimal-values-as-attribute-params-in-c – BoltClock

回答

0

我已經更新了我的自定義enumDescriptionAttribute以下幾點:

public class DescriptionWithValueAttribute : DescriptionAttribute 
{ 
    public Decimal Value { get; private set; } 

    public DescriptionWithValueAttribute(String description, Double value) 
     : base(description) 
    { 
     Value = Convert.ToDecimal(value); 
    } 
} 

它需要一個Double然後轉換爲Decimal,因爲我需要的最終值作爲Decimal。按預期工作。

3

根據this article

屬性參數被限制爲以下類型的恆定值:

  • 簡單類型(布爾,字節,字符,短,整型,長整型,浮點和雙)
  • 的System.Type
  • 枚舉對象(參數類型的對象的屬性參數必須是現代單片機中的一個的恆定值E型產品)。上述任何類型的
  • 一維數組

所以,你不能使用十進制。用浮點或雙點替換它。其他方式 - 將值存儲爲字符串並解析它。

相關問題