Дерево выражений может не содержать вызов или вызов, который использует необязательные аргументы

Дерево выражений может не содержать вызов или вызов, который использует необязательные аргументы

return this.RedirectToAction<MerchantController>(x => x.Edit(merchantId));

Если у редактирования был второй аргумент с нулевым значением.

Почему это?

Ответ 1

базовый API дерева выражений не поддерживает необязательные аргументы.

Для IL-скомпилированного кода компилятор С# вставляет значения по умолчанию во время компиляции (жестко запрограммированные), поскольку CLR не поддерживает вызовы с необязательными аргументами, когда аргументы не указаны явно.

Ответ 2

Было такое же сообщение при попытке использовать Mock.setup для макета метода с несколькими параметрами по умолчанию. Мне просто нужно было добавить дополнительные параметры в лямбду.

void someMethod(string arg1 = "", string arg2 = "")

mockedObject.Setup(x => x.someMethod(It.IsAny<string>(), It.IsAny<string>()))