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

时间:2010-05-04 08:58:38

标签: .net

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

  

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

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

1 个答案:

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