C#“常量对象”用作默认参数
有没有办法创建一个常量对象(即它无法编辑并在编译时创建)?
我只是在玩C#语言并注意到可选参数function,并认为可以将默认对象用作可选参数。 考虑以下:
//this class has default settings private const SettingsClass DefaultSettings = new SettingsClass (); public void doSomething(SettingsClass settings = DefaultSettings) { }
这显然不能编译,但是我想做的一个例子。 是否可以创建这样的常量对象并将其用作可选参数的默认值?
不,可选参数的默认值需要是编译时常量。
在您的情况下,解决方法是:
public void doSomething(SettingsClass settings = null) { settings = settings ?? DefaultSettings; ... }
一般来说你想要的是不可能的。 如Ani的答案所示,您可以使用“无效”默认值伪造它,但如果没有值,您可以将其视为无效。 对于可以将参数更改为可空类型的值类型,这不会是一个问题,但是您将产生装箱并且还可以“稀释”函数的界面以适应实现细节。
如果将可选参数替换为多个重载的前C#4范例,则可以实现所需的function:
public void doSomething() { var settings = // get your settings here any way you like this.doSomething(settings); } public void doSomething(SettingsClass settings) { // implementation }
即使参数是值类型,这也适用。
您可以使用readonly属性,而不是const。 例如:
//this class has default settings private readonly SettingsClass DefaultSettings = new SettingsClass (); public void doSomething(SettingsClass settings = DefaultSettings) { }