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