You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Moq中用方法组替代Lambda传Callback会报错?如何转InvocationAction?

Moq中Callback方法组转换InvocationAction编译错误的原因与解决办法

错误原因

Moq的Callback方法包含多个重载,其中无参重载对应的委托类型是InvocationAction(无返回值、无参数)。当直接传递方法组FakeCaptureTargetScreen时,编译器无法自动推断出你要使用带4个参数的Callback重载,反而尝试匹配无参的InvocationAction重载——而你的方法是带4个参数的,类型不匹配,因此抛出编译错误。

解决办法

方法一:显式指定Callback的泛型参数

通过明确声明泛型参数,告诉编译器要匹配的参数类型,就能正确绑定到对应的重载:

_mockScreener
    .Setup(x => x.CaptureTargetScreen(
        It.IsAny<string>(),
        It.IsAny<int>(),
        It.IsAny<int>(),
        It.IsAny<Action<Bitmap>>()
    ))
    .Callback<string, int, int, Action<Bitmap>>(FakeCaptureTargetScreen);

方法二:用Lambda包装方法组

如果不想写泛型参数,也可以把方法组包装进Lambda表达式,让编译器能正确推断参数类型:

_mockScreener
    .Setup(x => x.CaptureTargetScreen(
        It.IsAny<string>(),
        It.IsAny<int>(),
        It.IsAny<int>(),
        It.IsAny<Action<Bitmap>>()
    ))
    .Callback((string windowTitle, int offsetFromLeft, int offsetFromBottom, Action<Bitmap> onImageCaptured) => 
        FakeCaptureTargetScreen(windowTitle, offsetFromLeft, offsetFromBottom, onImageCaptured)
    );

内容的提问来源于stack exchange,提问作者Zach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 16:57:10