【问题标题】:Is there a specific reason that String.Empty is not a Const? [duplicate]String.Empty 不是 Const 是否有特定原因? [复制]
【发布时间】:2011-07-26 03:05:36
【问题描述】:

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

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

微软有什么理由这样做吗?

【问题讨论】:

  • 只使用空字符串文字:""
  • 废话。没有看到重复的,它们通常会在您编写时出现。

标签: c# string


【解决方案1】:

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

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

我的意思是 C# 编译器将替换代码中常量的所有实例,并将“变量”替换为值。

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

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

【讨论】:

  • 总是一个坏主意?例如,您能否设想“空字符串”或Math.PI 会发生变化的情况?
  • 斯基特先生,你挖这个真是太不公平了。再次阅读问题和我的答案,让我想知道我在想什么。我认为我的答案应该保留在我认为有效的另一个问题上。对于这个问题,不多。如果可以的话,我会给自己投反对票。
【解决方案2】:

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

【讨论】:

  • 不,这与它无关。
猜你喜欢
  • 2021-01-07
  • 2015-02-25
  • 2012-12-01
  • 1970-01-01
  • 2020-09-17
  • 2011-10-29
  • 2016-12-25
  • 1970-01-01
  • 2010-12-04
相关资源
最近更新 更多