我遇到了一个类似的例子:
public Dictionary<string, object> generate(
string elementId,
Dictionary<string, object> additionalAttributes = null)
{
.... method body
}
为什么将字典作为参数传递给null?我还没有见过这种结构。是否必须使用可选参数执行某些操作?
答案 0 :(得分:3)
我无法回答你的第一个问题,但第二个问题的答案是肯定的。这是一个可选参数。 C#只允许可选的引用类型参数采用默认值null
,但字符串除外,我相信它可以取任何常量字符串值。
参考:MSDN
答案 1 :(得分:1)
我用它来节省编写函数重载的时间。例如,而不是重载两个函数:
void SameFunctionName(Parameter1){ .. }
void SameFunctionName(Parameter1, Parameter2){ .. }
// maybe additional function body with three parameters .. etc
我只是用这种情况写一个:
void MyFunction(Parameter1, Parameter2 = null){ .. }
因此,我的函数中的一个小if语句将检查Parameter2
是否为null
,然后做出决定。一体化功能。
这个案例的函数调用在两种情况下都有效:
MyFunction(Parameter1); // This is a valid syntax
MyFunction(Parameter1, Parameter2); // This is a valid syntax
答案 2 :(得分:0)
可选参数(例如您在示例中使用的参数)只能设置为常量值,这意味着您无法使用任何引用值,这就是Dictionary的含义,因此null是唯一允许的值你可以初始化一个Dictionary类型的可选变量,如果方法使用类型为int或string,那么可以为可选参数初始化值,否则它必须为null
答案 3 :(得分:0)
是的,如果你使用函数重载,它可以节省时间。例如这个 可以避免
Void Main()
{
fun1(11);
fun1(12,13);
}
public fun1(int i )
{
Print(i);
}
public fun1(int i ,int j)
{
Print(i+j);
}
下面的代码可以避免这种情况,也可以节省时间和空间
Void Main()
{
fun1(12);
}
public fun1(int i ,int j = NULL)
{
if(j==NULL)
Print(i);
else
Print(i+j);
}