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

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

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

有人可以向我解释为什么鸭子做Khaboom工作而Khaboom不工作?!

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

‘parameter’的默认参数值必须是编译时常量。

嗯…… 是的

Empty定义如下:

 public static readonly string Empty 

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

默认值必须是以下类型的表达式之一:

  • 不断表达;
  • 表达式为新的ValType(),其中ValType是值类型,例如枚举或结构;
  • forms为default(ValType)的表达式,其中ValType是值类型。

由于string.Empty既不是这些东西,也不允许。

http://msdn.microsoft.com/en-us/library/dd264739.aspx

默认参数值必须是常量,但String.Empty是只读字段。