Jon*_*eet 34
不幸的是你不能在属性值中使用小数,因为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节中:
如果以下所有语句均为> true,则表达式E是attribute-argument-expression:
- E的类型是属性参数类型(第17.1.3节).
- 在编译时,E的值可以解析为以下之一:
- 一个恒定的值.
- System.Type对象.
- 属性参数表达式的一维数组.