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

时间:2014-06-01 22:03:44

标签: c# optional-parameters

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

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

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

有人可以向我解释为什么鸭KhaboomBazinga没有工作时{{1}}工作了吗?

错误消息引发了这个:

  

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

嗯......

3 个答案:

答案 0 :(得分:13)

Empty定义如下:

public static readonly string Empty

这不是常数。这是一个只读的领域。

答案 1 :(得分:4)

  

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

     
      
  • 一个恒定的表达;
  •   
  • 新形式ValType()的表达式,其中ValType是值类型,例如枚举或结构;
  •   
  • 表单default(ValType)的表达式,其中ValType是值类型。
  •   

由于string.Empty不属于这些事情,因此不允许这样做。

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

答案 2 :(得分:2)

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