我正在阅读Bill Wagner 的《Effective C# 》。在Item 14 - Minimize Duplicate Initialization Logic中,他展示了在构造函数中使用新的可选参数功能的以下示例:
public MyClass(int initialCount = 0, string name = "")
请注意,他使用""
而不是string.Empty
.
他评论说:
您会注意到 [在上面的示例中] 第二个构造函数指定了 "" 作为name参数的默认值,而不是更习惯的
string.Empty
. 那是因为string.Empty
不是编译时常量。它是在字符串类中定义的静态属性。因为它不是编译常量,所以不能将它用作参数的默认值。
如果我们不能string.Empty
在所有情况下都使用静态,那不是违背了它的目的吗?我认为我们会使用它来确保我们有一种独立于系统的方法来引用空字符串。我的理解错了吗?谢谢。
更新
只是一个后续评论。根据 MSDN:
每个可选参数都有一个默认值作为其定义的一部分。如果没有为该参数发送任何参数,则使用默认值。默认值必须是常量。
然后我们不能使用System.Environment.NewLine
任何一个,或者使用新实例化的对象作为默认值。我还没用过VS2010,这很令人失望!