web-dev-qa-db-fra.com

Une arborescence d'expression ne peut pas contenir un appel ou une invocation utilisant des arguments facultatifs

Une arborescence d'expression ne peut pas contenir un appel ou une invocation utilisant des arguments facultatifs

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

Où edit avait un deuxième argument nullable.

Pourquoi est-ce?

107
bevacqua

API d'arborescence d'expression sous-jacente ne prend pas en charge les arguments facultatifs.

Pour le code compilé en langage IL, le compilateur C # insère les valeurs par défaut au moment de la compilation (codé en dur), car le CLR ne prend pas en charge les méthodes d'appel avec des arguments facultatifs lorsque les arguments ne sont pas fournis explicitement.

84
usr

Avait le même message lorsque vous essayez d'utiliser Mock.setup pour simuler une méthode avec plusieurs paramètres par défaut. Il me suffisait d'ajouter les paramètres supplémentaires dans le lambda.

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

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