Un albero delle espressioni non può contenere una chiamata o un richiamo che utilizza argomenti opzionali


146

Un albero delle espressioni non può contenere una chiamata o un richiamo che utilizza argomenti opzionali

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

Dove modifica aveva un secondo argomento nullable.

Perchè è questo?

Risposte:


106

L' API dell'albero delle espressioni sottostante non supporta argomenti facoltativi.

Per il codice compilato con IL, il compilatore C # inserisce i valori predefiniti al momento della compilazione (hard-coded), poiché CLR non supporta i metodi di chiamata con argomenti facoltativi quando gli argomenti non vengono forniti in modo esplicito.


2
Questo in qualche modo include sovraccarichi? Lo stavo ottenendo quando ho fatto un sovraccarico. Qualcosa come il vuoto Blah (stringa a) e il vuoto Blah (oggetto a). Quando ho provato a inviare una chiamata alla versione MOQ con oggetto, mi ha dato questo errore.
vbullinger,

4
I sovraccarichi sono pienamente supportati nel senso che un determinato sovraccarico verrà codificato nella struttura ad albero.
usr

1
Messaggio di errore piuttosto criptico, ma questa risposta ha mostrato la strada, avevo un parametro opzionale con valore predefinito sul metodo che stava cercando di deridere.
vpalmu,

143

Aveva lo stesso messaggio quando cercavo di usare Mock.setup per deridere un metodo con più parametri predefiniti. Ho dovuto solo aggiungere i parametri aggiuntivi nella lambda.

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

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

1
Questo mi ha aiutato. Mi mancava il It.IsAny<object>. Fondamentalmente mi mancava un parametro persomeMethod()
akasoggybunz il

Ho anche dovuto assicurarmi di includere i valori per ogni parametro nel metodo (nonostante diversi parametri nella firma del metodo abbiano valori predefiniti impostati).
slashNburn,

2
A seconda del caso d'uso è x.someMethod(default,default)possibile utilizzare anche ... ...
LosManos,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.