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