可选的Arguments或Named Arguments初始化为null? C#

时间:2016-07-01 13:59:59

标签: c#

我遇到了一个类似的例子:

public Dictionary<string, object> generate(
  string elementId,
  Dictionary<string, object> additionalAttributes = null)
{
.... method body
}

为什么将字典作为参数传递给null?我还没有见过这种结构。是否必须使用可选参数执行某些操作?

4 个答案:

答案 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);
}