表达式树可能不包含使用可选参数的调用或调用


145

表达式树可能不包含使用可选参数的调用或调用

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

其中edit有第二个可为null的参数。

为什么是这样?

Answers:


106

基础表达式树API不支持可选参数。

对于IL编译的代码,C#编译器会在编译时插入默认值(硬编码),因为当未明确提供参数时,CLR不支持使用可选参数的调用方法。


2
这是否包含过载?我超载时得到了这个。诸如void Blah(字符串a)和void Blah(对象a)之类的东西。当我尝试用对象的版本进行最小起订量时,它给了我这个错误。
vbullinger

4
从某种意义上说,特定的重载将被硬编码到树中,完全支持重载。
usr

1
很神秘的错误消息,但是这个答案显示了方式,我在方法上尝试使用具有默认值的可选参数来进行模拟。
vpalmu

139

尝试使用Mock.setup模拟具有多个默认参数的方法时,出现了相同的消息。我只需要在lambda中添加其他参数。

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)可以使用。
LosManos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.