在属性中使用int constant

Sas*_*cha 6 c# const

任何人都可以解释为什么我不能在C#属性中使用const Int32?

例:

private const Int32 testValue = 123;  
[Description("Test: " + testValue)]  
public string Test { get; set; }
Run Code Online (Sandbox Code Playgroud)

使编译器说:

"属性参数必须是常量表达式,......"

为什么?

SLa*_*aks 19

如错误所述,属性参数必须是常量表达式.

连接字符串和整数不是常量表达式.

因此,如果"Test: " + 123直接传递,它将给出相同的错误.另一方面,如果更改testValue为字符串,则会进行编译.


说明

常量表达式的规则声明常量表达式可以包含算术运算符,前提是两个操作数本身都是常量表达式.

因此,"A" + "B"仍然是不变的.

但是,"A" + 1使用string operator +(string x, object y);整数操作数被装箱到对象的.
常量表达式规则明确说明了这一点

常量表达式中不允许进行其他转换,包括装箱,取消装箱和非空值的隐式引用转换.

  • @Sascha:正确,AFAIK.您可以创建自己的属性类来继承那个属性类,并在传递给`base()`之前在其参数上调用`ToString()`. (3认同)