Необязательный параметр ошибки словаря: значение параметра Defualt для 'nodeInfo' должно быть постоянной времени компиляции

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

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

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

1 ответ

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

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

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

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

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

Другие вопросы по тегам