为什么我不能将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
既不是这些东西,也不允许。
默认参数值必须是常量,但String.Empty是只读字段。