String.Empty不是Const的特定原因吗?

时间:2011-03-30 13:53:45

标签: c# string

  

可能重复:
  Why isn't String.Empty a constant?

我想在我的一些属性的属性中使用string.Empty,但后来看到它实际上不是Const而是静态成员。

微软有没有理由这样做?

2 个答案:

答案 0 :(得分:5)

我想说在引用的程序集中使用const总是一个非常糟糕的主意。

原因是C#编译器将常量视为值而不是引用,正如我在answer中所说的那样。

  

这意味着C#编译器将替换代码中的所有常量实例,并将“variable”替换为值。

     

这意味着即使您更新程序集GlobalConstants.dll并将其复制到您拥有的某个应用程序,也需要重新编译该应用程序。不这样做会导致应用程序使用旧的常量值。

     

要解决这个问题,你可以简单地使用public static readonly而不是public const,因为readonly修饰符与const的不同之处在于它被C#编译器视为代码而不是值的引用。

答案 1 :(得分:0)

我认为原因是:字符串是引用类型,而不是值类型。并且比较两个引用(当使用静态成员时)比两个字符串实例(当你使用const时)更快