为什么我不能将string.Empty用作与空引号相反的可选参数?

Kon*_*ten 6 c# optional-parameters

我正在改进我的代码并注意到在某些地方我有可选参数,其默认值为空字符串.我将其更改为类中的默认值为空字符串,猜猜是什么!显然,空引号和string.Empty.之间存在差异.什么鸭子?!(打字错误)

private void Khaboom(String parameter = "") { ... }

private void Bazinga(String parameter = String.Empty) { ... }
Run Code Online (Sandbox Code Playgroud)

谁能向我解释为什么不鸭Khaboom工作,同时Bazinga不?

错误消息引发了这样的错误:

'parameter'的默认参数值必须是编译时常量.

嗯...... 是的!

spe*_*der 13

Empty 定义如下:

public static readonly string Empty
Run Code Online (Sandbox Code Playgroud)

这不是一个常数.这是一个只读字段.

  • 对于那些想知道为什么它不是一个常数的人来说,实际上可能存在[非常好的理由](http://www.stum.de/2009/01/14/const-strings-a-very-convenient-方式对拍自己,在最英尺/). (6认同)