传递方法至接收in Action<ControlPoint<T>,pt>的构造函数时语法报错
问题解决:无法将方法组转换为
in Action<ControlPoint<pt>, pt> 错误根源
你的代码存在两个核心问题:
1. 泛型类型不匹配
Test类构造函数使用了泛型参数T,但创建实例时未指定T的具体类型(应为pt),且自定义方法的参数是ControlPoint<pt>,与构造函数里的ControlPoint<T>类型不匹配。
2. 委托与方法签名不兼容
构造函数接收的Action<ControlPoint<T>, pt>委托参数是值传递,但fnc1/fnc2方法的参数用了in修饰符(只读引用传递),两者参数传递逻辑不一致,导致无法隐式转换。另外,构造函数参数里的in Action<...>写法无实际意义,委托本身是引用类型,这种修饰不会改变传递逻辑,反而易造成混淆。
修复方案
步骤1:统一泛型类型
先将Test类声明为泛型类:
public class Test<T> { Action<ControlPoint<T>, T> _callback1; Action<ControlPoint<T>, T> _callback2; public Test(Action<ControlPoint<T>, T> callback1, Action<ControlPoint<T>, T> callback2) { _callback1 = callback1; _callback2 = callback2; } }
步骤2:匹配参数传递逻辑
有两种可选方案:
选项A:移除方法的in修饰符,适配Action委托签名
修改自定义方法:
void fnc1(ControlPoint<pt> ctrPt, pt pt) {} void fnc2(ControlPoint<pt> ctrPt, pt pt) {}
创建实例时指定泛型类型:
Test<pt> test = new Test<pt>(fnc1, fnc2);
选项B:自定义带in参数的委托,适配方法签名
若需保留方法的in修饰符,先定义自定义委托:
public delegate void InAction<T1, T2>(in T1 arg1, in T2 arg2);
再修改Test类的委托类型:
public class Test<T> { InAction<ControlPoint<T>, T> _callback1; InAction<ControlPoint<T>, T> _callback2; public Test(InAction<ControlPoint<T>, T> callback1, InAction<ControlPoint<T>, T> callback2) { _callback1 = callback1; _callback2 = callback2; } }
此时自定义方法可保留in,创建实例方式不变:
Test<pt> test = new Test<pt>(fnc1, fnc2);
内容的提问来源于stack exchange,提问作者WDUK
相关产品推荐
相关产品推荐

