有任何解决方法以下问题?
Is there any workaround for the following issue?
这是属性参数必须是一个常量前pression
An attribute argument must be a constant expression
我想用在小数属性的参数。
I want to use decimals in an attribute’s parameter.
不幸的是你不能使用小数的属性值,因为CLR本身并不真正了解 System.Decimal
类型 - 它不是一个基本类型如int,双等C#编译器基本上是假货它decimal类型const的领域,但它无法实现与属性相同的效果
Unfortunately you can't use decimals in attribute values, as the CLR itself doesn't really know about System.Decimal
type - it's not a primitive type like int, double etc. The C# compiler basically fakes it for const fields of type decimal, but it can't achieve the same effect with attributes.
从C#3规格,第17.1.3:
From the C# 3 spec, section 17.1.3:
的定位和命名的类型 一个属性类的参数 有限的属性参数 类型,它们是:
The types of positional and named parameters for an attribute class are limited to the attribute parameter types, which are: 执行下列操作之一 类型:布尔,字节,字符,双, 浮动,INT,长,为sbyte,总之, 串,UINT,ULONG,USHORT。 类型的对象。 类型的System.Type。 枚举 类型,只要它具有公共 可访问性和类型,其中 它是嵌套(如果有的话)也具有公共 可访问性(第17.2节)。 在上面的一维数组 类型。 One of the following types: bool, byte, char, double, float, int, long, sbyte, short, string, uint, ulong, ushort. The type object. The type System.Type. An enum type, provided it has public accessibility and the types in which it is nested (if any) also have public accessibility (§17.2). Single-dimensional arrays of the above types.
再后来在第17.2:
这是EX pression E是一个属性参数EX pression如果所有下面的语句是>真:
An expression E is an attribute-argument-expression if all of the following statements are > true: e的类型是一个属性 参数类型(§17.1.3)。 在 编译时,E的值可以是 解析为以下之一: 系统 恒定值。 一个System.Type对象。 到一维数组 属性参数EX pressions。 The type of E is an attribute parameter type (§17.1.3). At compile-time, the value of E can be resolved to one of the following: A constant value. A System.Type object. A one-dimensional array of attribute-argument-expressions.