我有以下一小段代码让我感到有些困惑,因为我对C#并不熟悉。
我需要使用一个可选参数,如下所示:
private string GetSomething(object inputObject, string optionalString = "")
{
//...
}
一切都很好。但是,如果我编辑上面的部分以遵循项目其余部分的编码标准,如下所示,我收到了一个错误:
private string GetSomething(object inputObject, string optionalString = String.Empty)
{
//...
}
错误读数
'optionalString'的默认参数值必须是编译时常量。
虽然我理解为什么它需要是一个常数,为什么后一版本不会像第一个版本那样简单地优化和编译?在某些情况下是否存在差异?
如果重要,我使用的是Visual Studio 2013,该项目是.NET 4.5。
答案 0 :(得分:6)
对于complicated reasons,String.Empty
不是编译时常量;相反,它是一个只读字段。
JITter将优化对它的所有引用,但C#语言不会将其视为常量。