Необязательный параметр ошибки словаря: значение параметра Defualt для 'nodeInfo' должно быть константой во время компиляции - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь определить новую подпрограмму, которая принимает словарь в качестве необязательного параметра со значением по умолчанию в виде пустого словаря, а также двух необязательных строк.

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

Я продолжаю получатьошибка при передаче словаря, что « значение параметра по умолчанию для 'nodeInfo' чаще всего будет константой времени компиляции ".Как это исправить?Спасибо

1 Ответ

0 голосов
/ 10 февраля 2019

Вы не можете, не напрямую.Значения по умолчанию для параметров должны быть константами времени компиляции.

У вас есть несколько вариантов.

Первый - использовать значение по умолчанию для часового типа, например 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 на то, что разрешено в качестве значения параметра по умолчанию:

  • константное выражение;
  • выражение формы new ValType (), где ValType - тип значения,например, enum или struct;
  • выражение формы по умолчанию (ValType), где ValType - тип значения.

выражения констант :

Константами могут быть числа, логические значения, строки или нулевая ссылка

...