如何设置操作的默认参数值
本文关键字:默认 参数 操作 何设置 设置 | 更新日期: 2023-09-27 18:33:21
当参数为字典类型时,如何为操作设置默认参数值?
例如:
public void Test(Dictionary<int, bool> dic) {
...
}
您不能按照您想要的方式为其提供默认值,因为它必须是编译时常量值,但您可以执行以下操作:
private static bool Test(Dictionary<string, string> par = null)
{
if(par == null) par = GetMyDefaultValue();
// Custom logic here
return false;
}
您可以将null
用作特殊情况,就像在其他答案中一样,但是如果您仍然希望能够调用Test(null)
并且具有与调用Test()
不同的行为,那么您必须链接重载:
public void Test(Dictionary<int, bool> dic) {
//optional, stops people calling Test(null) where you want them to call Test():
if(dic == null) throw new ArgumentNullException("dic");
...
}
public void Test() {
var defaultDic = new Dictionary<int, bool>();
Test(defaultDic);
}
只能将null
用作引用类型的默认参数值。
默认值必须是以下类型的表达式之一:
- 形式
一个常量表达式;
- 形式
为
new ValType()
的表达式,其中ValType
是值类型,例如enum
或struct
;为
default(ValType)
的表达式,其中ValType
是值类型。
MSDN
不能将字典设置为 NULL 以外的任何内容。如果您尝试,例如:
public void Test(Dictionary<int, bool> dic = new Dictionary<string, string> { { "1", "true" }})
或其他什么,那么你会看到这个错误:
"dic"的默认参数值必须是编译时常量。
因此,在这种情况下,NULL
是您唯一的选择。但是,这样做毫无意义
public void Test(Dictionary<int, bool> dic = null)
在最坏的情况下,如果调用方尚未实例化新实例,则无论如何都会NULL
传入的dic
,因此无论如何添加NULL
默认值都没有优势。
您希望在方法签名中提供非null
默认值,则无法使用此类型执行此操作。但是,您有两种替代解决方案这立即浮现在脑海中。
1,使用带有默认值的可选参数,这必须为Dictionary
(以及除string
我相信之外的所有其他引用类型)null
,并且您将需要方法内部的逻辑来处理它:
public void Test(Dictionary<int, bool> dictionary = null)
{
// Provide a default if null.
if (dictionary == null)
dictionary = new Dictionary<int, bool>();
}
或者,按照我的做法,只需使用"老式"方法重载。这使您可以区分不提供参数的人和提供null
参数的人:
public void Test()
{
// Provide your default value here.
Test(new Dictionary<int, bool>();
}
public void Test(Dictionary<int, bool> dictionary)
{
}
可选参数无论如何都会编译成重载方法,因此它们几乎在语义上相同,它只是您希望在何处表达默认值的首选项。