自定义属性:属性参数必须是常量表达式

时间:2015-10-08 05:16:59

标签: c# enums compiler-errors custom-attributes

我已定义了自定义enum DescriptionAttribute(请参阅我之前的问题: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,
}

编译时出现以下错误:

  

属性参数必须是常量表达式,typeof表达式   或属性参数类型

的数组创建表达式

我也尝试过:[DescriptionWithValueAttribute("Set Top Box", (Decimal)9.95)]

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

根据this article

属性参数仅限于以下类型的常量值:

  • 简单类型(bool,byte,char,short,int,long,float和double)
  • 字符串
  • System.Type
  • enums object(对象类型的属性参数的参数必须是上述类型之一的常量值。)
  • 任何上述类型的一维阵列

所以,你不能使用Decimal。用浮球或双层替换它。其他方式 - 将值存储为字符串并解析它。

答案 1 :(得分:0)

我已将自定义enum DescriptionAttribute更新为以下内容:

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。按预期工作。