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

C#中将带参数的方法作为Action参数传入时出现类型转换错误如何解决

错误原因

你代码中CallWriteInScreen(WriteInScreen("Hello!"))的写法是直接执行WriteInScreen方法,该方法返回值为void,自然无法转换为要求的System.Action委托类型。Action是无参数无返回值的委托类型,要求传入的是委托实例,而非方法执行后的结果。

另外你代码中存在笔误:WriteInScreen10Time少了后缀s,实际方法名是WriteInScreen10Times。

解决方案

方案1:用Lambda表达式封装带参数的调用

直接用无参数Lambda把你要执行的带参方法包裹起来,生成符合Action签名的匿名委托即可,不需要修改原有CallWriteInScreen的定义,适配性更高,适合参数不固定的场景:

void StartCall(){
    CallWriteInScreen(() => WriteInScreen("Hello!"));
    CallWriteInScreen(() => WriteInScreen10Times("Hi!"));
}

方案2:修改CallWriteInScreen的委托参数类型

如果你调用的方法都是固定接收string参数,可以把参数改成带泛型的Action<string>,同时单独传入参数值,这种写法更规范,适合所有传入方法的参数类型/数量统一的场景:

// 修改后的调用方法
void CallWriteInScreen(Action<string> Method, string text) {
    Method(text);
}

void StartCall(){
    CallWriteInScreen(WriteInScreen, "Hello!");
    CallWriteInScreen(WriteInScreen10Times, "Hi!");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:36:00