一个属性参数必须是恒定的前pression属性、参数、pression

2023-09-04 00:13:28 作者:青篱

有任何解决方法以下问题?

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如果所有下面的语句是>真:

实时计算引擎Spark笔试题 Spark Streaming 反压机制 Back Pressure

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.