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

3
我定义了一个自定义的枚举 "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("机顶盒", (Decimal)9.95)]

有什么想法吗?


1
十进制数不能用作属性参数。请参见https://dev59.com/23RB5IYBdhLWcg3wyqOo。 - BoltClock
2个回答

4
根据这篇文章的说法: 属性参数被限制为以下类型的常量值:
- 简单类型(bool、byte、char、short、int、long、float和double) - 字符串 - System.Type - 枚举对象(类型为object的属性参数的参数必须是上述类型中的某个常量值) - 上述任何类型的一维数组
因此,您不能使用Decimal。请用float或double替换它。另一种方法是将值存储为字符串并解析它。

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类型。运行正常。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接