任何人都可以解释为什么我不能在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);整数操作数被装箱到对象的.
常量表达式规则明确说明了这一点
常量表达式中不允许进行其他转换,包括装箱,取消装箱和非空值的隐式引用转换.
| 归档时间: |
|
| 查看次数: |
6164 次 |
| 最近记录: |