在属性中使用int constant
任何人都可以解释为什么我不能在C#属性中使用const Int32?
例:
private const Int32 testValue = 123; [Description("Test: " + testValue)] public string Test { get; set; }
使编译器说:
“属性参数必须是常量表达式,……”
为什么?
如错误所述,属性参数必须是常量表达式。
连接字符串和整数不是常量表达式。
因此,如果直接传递"Test: " + 123
,它将给出相同的错误。 另一方面,如果将testValue
更改为字符串,则会进行编译。
说明
常量表达式的规则声明常量表达式可以包含算术运算符,前提是两个操作数本身都是常量表达式。
因此, "A" + "B"
仍然是恒定的。
但是, "A" + 1
使用string operator +(string x, object y);
,其中整数操作数被装箱到一个对象。
常量表达式规则明确说明了这一点
常量表达式中不允许进行其他转换,包括装箱,取消装箱和非空值的隐式引用转换。
int和string之间的’+’运算符会导致调用int的ToString方法,而不是“编译时间常量”。 就是这样
private const int x = 3; private const string s = x.ToString(); // cannot be done
您只能传递编译时计算的常量,包括typeof()
运算符的结果,并将decimal
s排除在Attribute
的构造函数中