【问题标题】:An expression tree may not contain a call or invocation that uses optional arguments表达式树可能不包含使用可选参数的调用或调用
【发布时间】:2012-09-06 23:21:21
【问题描述】:

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

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

edit 有第二个可以为空的参数。

这是为什么?

【问题讨论】:

    标签: c# asp.net-mvc-3


    【解决方案1】:

    错误:'异常树可能不包含使用选项参数的调用或调用'

    为什么:因为你在调用方法时没有提供可选参数。主要是您在使用 IAsyncProxy 服务对象时通过 .net 核心获得此功能。

    修复:传递所有可选参数值,如果你可以使用默认值。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:

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

    void someMethod(string arg1 = "", string arg2 = "")
    
    mockedObject.Setup(x => x.someMethod(It.IsAny<string>(), It.IsAny<string>()))
    

    【讨论】:

    • 根据用例也可以使用 ...x.someMethod(default,default)...。
    【解决方案3】:

    underlying expression tree API 不支持可选参数。

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

    【讨论】:

    • 这是否包含重载?当我超载时,我得到了这个。像 void Blah(string a) 和 void Blah(object a) 这样的东西。当我尝试 MOQ 调用带有对象的版本时,它给了我这个错误。
    • 完全支持重载,因为特定重载将被硬编码到树中。
    • 相当神秘的错误消息,但这个答案显示了方法,我有可选参数,该方法的默认值是试图模拟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2018-02-22
    相关资源
    最近更新 更多