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

jio*_*jio 27 .net

以下问题是否有解决方法?

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

我想在属性的参数中使用小数.

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对象.
    • 属性参数表达式的一维数组.