Также есть ли способ использовать значения времени выполнения для необязательных параметров метода?
Почему для необязательных параметров в C# 4.0 требуются константы времени компиляции?
Ответы (3)
Необязательные параметры должны быть константами, поскольку они записываются как значения атрибута. Следовательно, они наследуют все ограничения, которые имеет значение атрибута.
Невозможно напрямую закодировать значение времени выполнения. Однако вы можете приблизиться к следующему шаблону
public void MyApi(SomeType type = null) {
type = type ?? new SomeType();
...
}
Необязательные параметры компилируются в сборку, и поэтому (как и все, что обозначено как const
) они должны быть константой времени компиляции.
И нет, вы не можете использовать значения времени выполнения в качестве необязательных параметров.
Необязательные параметры определяются на во время компиляции и заменяются в методе, если вы вызываете метод со слишком небольшим количеством параметров. Они обрабатываются путем добавления атрибута к параметру в IL метода.
Таким образом, они должны быть полностью разрешены во время компиляции (как при создании, так как они являются атрибутом, так и при использовании). Невозможно использовать значения времени выполнения для необязательных параметров метода.