以下问题是否有解决方法?
属性参数必须是常量表达式
我想在属性的参数中使用小数。
答案 0 :(得分:32)
不幸的是你不能在属性值中使用小数,因为CLR本身并不真正了解System.Decimal
类型 - 它不是像int,double等原始类型.C#编译器基本上伪造它为const十进制类型的字段,但它不能与属性实现相同的效果。
从C#3规范,第17.1.3节:
位置和命名的类型 属性类的参数是 仅限于属性参数 类型,包括:
- 以下之一 类型:bool,byte,char,double, float,int,long,sbyte,short, string,uint,ulong,ushort。
- 类型对象。
- 类型System.Type。
- 一个枚举 类型,只要它是公开的 可访问性和其中的类型 嵌套(如果有的话)也有公共 可访问性(第17.2节)。
- 以上的一维数组 类型。
然后在第17.2节:
如果以下所有语句都是>,则表达式E是一个attribute-argument-expression。真:
- E的类型是属性 参数类型(第17.1.3节)。
- 在 编译时,E的值可以 解决了以下之一:
- 甲 恒定价值。
- System.Type对象。
- 一维数组 属性参数的表达式。