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

C# 表达式树不能包含使用可选参数的调用或调用,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,表达式树不能包含使用 可选参数 返回此.RedirectToAction(x=>x.Edit(merchantId)); 其中edit有第二个可为null的参数 这是为什么?不支持可选参数 对于IL编译代码,C#编译器在编译时插入默认值(硬编码),因为CLR不支持使用可选参数调用方法,也不支持在未显式提供参数的情况下调用这些方法。在尝试使用Mock.setup模拟具有多个默认参数的方法时,显示了相同的消息。我只需要在lambda中添加额外的参数 void someMethod(string a

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

返回此.RedirectToAction(x=>x.Edit(merchantId));
其中edit有第二个可为null的参数

这是为什么?

不支持可选参数


对于IL编译代码,C#编译器在编译时插入默认值(硬编码),因为CLR不支持使用可选参数调用方法,也不支持在未显式提供参数的情况下调用这些方法。

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

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

mockedObject.Setup(x => x.someMethod(It.IsAny<string>(), It.IsAny<string>()))
void someMethod(字符串arg1=”,字符串arg2=)
mockedObject.Setup(x=>x.someMethod(It.IsAny(),It.IsAny())

这是否包括重载?当我超负荷工作时,我得到了这个。类似于void Blah(字符串a)和void Blah(对象a)。当我试图调用带有object的版本时,它给了我这个错误。重载是完全支持的,因为特定的重载将被硬编码到树中。非常神秘的错误消息,但这个答案说明了方法,我在试图模拟的方法上有一个带有默认值的可选参数。根据用例也…
x.someMethod(默认值,默认值)
。。。可以使用。
void someMethod(string arg1 = "", string arg2 = "")

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