我正在改进我的代码并注意到在某些地方我有可选参数,其默认值为空字符串。我将其更改为类中的默认值为空字符串,猜猜是什么!显然,空引号和string.Empty
之间存在差异。什么鸭子?! (打字错误)
private void Khaboom(String parameter = "") { ... }
private void Bazinga(String parameter = String.Empty) { ... }
有人可以向我解释为什么鸭Khaboom
在Bazinga
没有工作时{{1}}工作了吗?
错误消息引发了这个:
'参数'的默认参数值必须是编译时常量。
嗯...... !
答案 0 :(得分:13)
Empty
定义如下:
public static readonly string Empty
这不是常数。这是一个只读的领域。
答案 1 :(得分:4)
默认值必须是以下类型的表达式之一:
- 一个恒定的表达;
- 新形式ValType()的表达式,其中ValType是值类型,例如枚举或结构;
- 表单default(ValType)的表达式,其中ValType是值类型。
由于string.Empty
不属于这些事情,因此不允许这样做。
答案 2 :(得分:2)
默认参数值必须是常量,但String.Empty是只读字段。