String.Empty和""之间的区别在可选参数中

时间:2015-04-07 20:41:08

标签: c#

我有以下一小段代码让我感到有些困惑,因为我对C#并不熟悉。

我需要使用一个可选参数,如下所示:

private string GetSomething(object inputObject, string optionalString = "")
{
    //...
}

一切都很好。但是,如果我编辑上面的部分以遵循项目其余部分的编码标准,如下所示,我收到了一个错误:

private string GetSomething(object inputObject, string optionalString = String.Empty)
{
    //...
}

错误读数

  

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

虽然我理解为什么它需要是一个常数,为什么后一版本不会像第一个版本那样简单地优化和编译?在某些情况下是否存在差异?
如果重要,我使用的是Visual Studio 2013,该项目是.NET 4.5。

1 个答案:

答案 0 :(得分:6)

对于complicated reasonsString.Empty不是编译时常量;相反,它是一个只读字段。

JITter将优化对它的所有引用,但C#语言不会将其视为常量。

相关问题