如何让Action委托适配返回byte类型的C#方法?
问题原因与解决方案
为什么绑定失败?
Action 委托的定义是无参数、无返回值的委托类型,而修改后的 test2 方法返回 byte 类型,方法签名和 Action 不匹配,所以直接绑定会报错。
可行解决方案
方案1:用Lambda表达式包裹,忽略返回值
这是最直接的解决方式,用Lambda把有返回值的方法包装成无返回值的逻辑,适配Action的要求:
public class B { public void test() { // 简洁写法 Action asd = () => test2(); // 或者带花括号的写法(如果需要加额外逻辑) // Action asd = () => { test2(); }; } private byte test2() { Console.WriteLine("LOL"); return 0; } }
方案2:如果需要处理返回值,在Lambda中添加逻辑
要是你需要用到test2的返回值,可以在Lambda里先调用方法并接收结果,再做后续处理:
public class B { public void test() { Action asd = () => { byte result = test2(); // 这里可以添加对result的处理代码,比如打印或者存储 Console.WriteLine($"返回值:{result}"); }; } private byte test2() { Console.WriteLine("LOL"); return 0; } }
方案3:换用匹配的委托类型(如果需要返回值)
如果你的场景本来就需要获取test2的返回值,那没必要硬用Action,直接用Func<byte>委托(无参数、返回byte的委托):
public class B { public void test() { Func<byte> asd = test2; // 调用时可以获取返回值 byte result = asd(); } private byte test2() { Console.WriteLine("LOL"); return 0; } }
内容的提问来源于stack exchange,提问作者Salvosnake
相关产品推荐
相关产品推荐

