开发者

An attribute argument must be a constant expression

Is there any workaround for the following issue?

An attri开发者_如何转开发bute argument must be a constant expression

I want to use decimals in an attribute’s parameter.


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.

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:

  • 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.

Then later in section 17.2:

An expression E is an attribute-argument-expression if all of the following statements are > true:

  • 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.
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜