174 votes

Un arbre d'expression ne peut pas contenir un appel ou une invocation qui utilise des arguments facultatifs

Un arbre d'expression ne peut pas contenir un appel ou une invocation qui utilise des des arguments facultatifs

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

Où l'édition avait un deuxième argument nullissime.

Pourquoi ?

184voto

ds4940 Points 1044

J'ai eu le même message en essayant d'utiliser Mock.setup pour simuler une méthode avec plusieurs paramètres par défaut. J'ai juste eu à 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>()))

12 votes

En fonction du cas d'utilisation, également ... x.someMethod(default,default) ... peuvent être utilisés.

117voto

usr Points 74796

El API d'arbre d'expression sous-jacent ne prend pas en charge les arguments facultatifs.

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

2 votes

Cela inclut-il d'une manière ou d'une autre les surcharges ? J'ai eu ce problème lorsque j'ai créé une surcharge. Quelque chose comme void Blah(string a) et void Blah(object a). Quand j'ai essayé de MOQ out un appel à la version avec l'objet, il m'a donné cette erreur.

5 votes

Les surcharges sont entièrement prises en charge dans le sens où une surcharge particulière sera codée en dur dans l'arbre.

1 votes

Message d'erreur plutôt cryptique, mais cette réponse m'a montré la voie, j'avais un paramètre optionnel avec une valeur par défaut sur la méthode que j'essayais de simuler.

1voto

Rakesh Points 11

Erreur : 'un arbre d'exception ne peut pas contenir un appel ou une invocation qui utilise des arguments d'option'.

Pourquoi : Parce que vous ne fournissez pas les paramètres optionnels lors de l'appel de la méthode. Cela se produit principalement dans .net core lorsque vous utilisez l'objet de service IAsyncProxy.

Correction : Passez la valeur de tous les paramètres optionnels, vous pouvez utiliser la valeur par défaut si vous le souhaitez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X