Дерево виразів не може містити виклик або виклик, які використовують необов'язкові аргументи


145

Дерево виразів не може містити виклик або виклик, які використовують необов'язкові аргументи

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

Там, де редакція мала другий, зворотний аргумент.

Чому це?

Відповіді:


106

Основне вираз дерева API не підтримує необов'язкові аргументи.

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


2
Це включає якось перевантаження? Я отримував це, коли робив перевантаження. Щось на кшталт недійсного Blah (рядок a) і void Blah (об'єкт a). Коли я намагався MOQ здійснити виклик до версії з об'єктом, це дало мені цю помилку.
vbullinger

4
Перевантаження повністю підтримуються в тому сенсі, що певне перевантаження буде жорстко закодовано в дерево.
usr

1
Досить загадкове повідомлення про помилку, але ця відповідь показала спосіб, у мене необов'язковий параметр зі значенням за замовчуванням у методі намагався знущатися.
vpalmu

140

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

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

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

1
Це мені допомогло. Мені не вистачало It.IsAny<object>. В основному я пропускав параметр дляsomeMethod()
akasoggybunz

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

1
Залежно від випадку використання також x.someMethod(default,default)може використовуватися ... ...
ЛосМанос
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.