我正在读比尔 · 瓦格纳的 有效 C # 。在 项目14-最小化重复初始化逻辑中,他展示了在构造函数中使用新的可选参数特性的以下示例:
public MyClass(int initialCount = 0, string name = "")
注意,他使用的是 ""
而不是 string.Empty
。
他评论道:
您将注意到[在上面的示例中] ,第二个构造函数为 姓名参数的默认值指定了“”,而不是更常见的
string.Empty
。这是因为string.Empty
不是编译时常量。它是在字符串类中定义的静态属性。因为它不是编译常数,所以不能将其用作参数的默认值。
如果我们不能在所有情况下都使用 string.Empty
静态,那么这不是违背了它的初衷吗?我认为我们应该使用它来确保我们有一个独立于系统的方法来引用空字符串。我理解错了吗?谢谢。
更新
只是一个后续评论。根据 MSDN:
每个可选参数都有一个默认值作为其定义的一部分。如果没有为该参数发送参数,则使用默认值。默认值必须是常量。
那么我们也不能使用 System.Environment.NewLine
,或者使用新实例化的对象作为默认值。我还没有使用 VS2010,这是令人失望的!