字典错误的可选参数:对于“将nodeinfo” Defualt参数值必须是编译时间常数

问题描述 投票:0回答:1

我试图定义一个新的子程序这需要在一个字典作为使用默认值作为一个空的字典,以及两个非可选的字符串的可选参数。

public void findPath(string start, string end,
    Dictionary<string, object[]> nodeInfo = new Dictionary<string, object[]>())
{}

通过字典的“为默认参数值‘的nodeinfo’最是编译时间常数”时,我不断收到一个错误。我该如何解决?谢谢

c# optional-parameters
1个回答
3
投票

你不能,不能直接。对于参数的默认值必须是编译时间常数。

你有几个选项。

第一种方法是使用一个哨兵默认值,比如null

public void findPath(string start, string end,
    Dictionary<string, object[]> nodeInfo = null)
{
    if (nodeInfo == null)
        nodeInfo = new Dictionary<string, object[]>();
}

第二是使用方法重载:

public void findPath(string start, string end)
{
    findPath(start, end, new Dictionary<string, object[]>();
}

public void findPath(string start, string end,
    Dictionary<string, object[]> nodeInfo)
{
}

他们需要的是编译时常因为他们烤到其中,该方法被称为地方。例如,如果使用null作为定点值,并写了这个:

findPath("start", "end");

它被编译到这一点:

findPath("start", "end", null);

查看什么是允许的默认参数值MSDN documentation

  • 常量表达式;
  • 形式新ValType的()的表达式,其中ValType是一个值类型,例如枚举或一个结构;
  • 形式默认(ValType),其中ValType是一个值类型的表达式。

Constant expressions

常量可以是数字,布尔值,字符串或空引用

© www.soinside.com 2019 - 2024. All rights reserved.