use*_*879 19 c# const optional-parameters
有没有办法创建一个常量对象(即它无法编辑并在编译时创建)?
我只是在玩C#语言并注意到可选参数功能,并认为可以将默认对象用作可选参数.考虑以下:
//this class has default settings
private const SettingsClass DefaultSettings = new SettingsClass ();
public void doSomething(SettingsClass settings = DefaultSettings)
{
}
Run Code Online (Sandbox Code Playgroud)
这显然不能编译,但是我想做的一个例子.是否可以创建这样的常量对象并将其用作可选参数的默认值?
Ani*_*Ani 30
不,可选参数的默认值需要是编译时常量.
在您的情况下,解决方法是:
public void doSomething(SettingsClass settings = null)
{
settings = settings ?? DefaultSettings;
...
}
Run Code Online (Sandbox Code Playgroud)
一般来说,你想要的东西是不可能的。正如 Ani 的回答所示,您可以使用“无效”默认值来伪造它,但是如果没有您可以认为无效的值,则此方法会失效。这对于值类型来说不是问题,您可以将参数更改为可空类型,但是您将招致装箱并且也可能“稀释”函数的接口以适应实现细节。
如果将可选参数替换为多个重载的 pre-C# 4 范式,则可以实现所需的功能:
public void doSomething()
{
var settings = // get your settings here any way you like
this.doSomething(settings);
}
public void doSomething(SettingsClass settings)
{
// implementation
}
Run Code Online (Sandbox Code Playgroud)
即使参数是值类型,这也有效。
| 归档时间: |
|
| 查看次数: |
13375 次 |
| 最近记录: |