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
相关产品推荐
相关产品推荐

