2015-04-07 34 views
0

之间的区别我有以下的一小段代码,让我有点困惑,因为我不是很熟悉C#。String.Empty和“”在可选参数

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

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

所有的膨胀和幸福。但是,如果我编辑了上面这段跟随项目的其余部分的编码标准,如下图所示,我得到了一个错误:

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

与错误读取

Default parameter value for 'optionalString' must be a compile-time constant.

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

回答

6

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

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