为什么我不能将String.Empty用作默认参数值?

Jos*_*den 9 .net string default-parameters

今天我在构造函数中创建了一个默认参数值.

public SomeClass (String something = String.Empty)
{
   // ...
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨道.

"something"的默认参数值必须是编译时常量.

我的印象是String类上的Empty是编译时常量.

.field public static initonly string Empty
Run Code Online (Sandbox Code Playgroud)

我是否理解编译时常量的含义,还是我需要接受的更为古怪?

Jas*_*nga 4

问题的可接受答案为什么 String.Empty 不是常量?是:

使用 static readonly 而不是 const 的原因是与非托管代码一起使用,如 Microsoft 在共享源公共语言基础结构 2.0 版本中所示。要查看的文件是 sscli20\clr\src\bcl\system\string.cs。

Empty 常量保存空字符串值。我们需要调用 String 构造函数,以便编译器不会将其标记为文字。

将其标记为文字意味着它不会显示为我们可以从本机访问的字段。

我从 CodeProject 上这篇方便的文章中找到了此信息。