当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在c#中使用十进制值作为属性参数?》经验,为你挑选了2个好方法。

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

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

谢谢.



1> JaredPar..:

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

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


这仍然是Framework 4.0的问题吗?和4.5,4.6.x?

2> Stefan Stein..:

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

class BlahAttribute : Attribute
{
  private decimal value;

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

[Blah("10.23")]
class Foo {}

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

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有