Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

An expression tree may not contain a call or invocation that uses optional arguments

An expression tree may not contain a call or invocation that uses optional arguments

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

Where edit had a second, nullable argument.

Why is this?

like image 401
bevacqua Avatar asked Sep 13 '12 19:09

bevacqua


3 Answers

Had the same message when trying to use Mock.setup to mock a method with multiple default parameters. I just had to add the additional parameters in the lambda.

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

mockedObject.Setup(x => x.someMethod(It.IsAny<string>(), It.IsAny<string>()))
like image 199
ds4940 Avatar answered Nov 20 '22 11:11

ds4940


The underlying expression tree API does not support optional arguments.

For IL-compiled code the C# compiler inserts the default values at compile time (hard-coded), because the CLR does not support calling methods with optional arguments either when the arguments are not provided explicitly.

like image 33
usr Avatar answered Nov 20 '22 11:11

usr


Error: 'an exception tree may not contain a call or invocation that uses option arguments'

Why: Because you are not providing the optional parameters when calling the method. Mainly you get this with .net core when using IAsyncProxy service object.

Fix: Pass all the optional parameters value, you may use default value if you.

like image 2
Rakesh Avatar answered Nov 20 '22 11:11

Rakesh