在c#中使用十进制值作为属性参数?

rjl*_*pes 78 c# parameters attributes decimal

我一直在尝试使用十进制值作为字段属性的参数但我得到编译器错误.

我发现这个博客文章链接说在.Net中使用它是不可能的,有人知道为什么他们选择这个或者我怎么能使用十进制参数?

谢谢.

Jar*_*Par 118

这是CLR限制.只有原始常量或基元数组可用作属性参数.原因是属性必须完全在元数据中编码.这与用IL编码的方法体不同.使用MetaData只会严格限制可以使用的值的范围.在当前版本的CLR中,元数据值仅限于基元,null,类型和基元数组(可能错过了次要基元).

基本类型的小数不是基本类型,因此不能在元数据中表示,以防止它成为属性参数.

  • 这仍然是Framework 4.0的问题吗?和4.5,4.6.x? (4认同)
  • “只有原始常量或原始数组可以用作属性参数。” 它似乎并不完全正确,例如,也允许 System.Type:https://msdn.microsoft.com/en-us/library/aa664615(v=vs.71).aspx (2认同)

Ste*_*ger 14

我也有同样的问题.我考虑使用字符串.这不是类型安全的,但它是可读的,我认为我们将能够在字符串中写入有效的数字:-).

class BlahAttribute : Attribute
{
  private decimal value;

  BlahAttribute(string number)
  {
    value = decimal.Parse(number, CultureInfo.InvariantCulture);
  }
}

[Blah("10.23")]
class Foo {}
Run Code Online (Sandbox Code Playgroud)

这不是一种美,但在考虑了所有选择后,它就足够了.