Python for .NET传递byte[]到C#方法报错及复合泛型List参数传参求解
问题解决
问题1:3参数重载调用报错解决
报错核心原因是Python for .NET会将枚举参数隐式转换为int类型,和C#方法要求的枚举类型不匹配,导致无法匹配到对应签名的方法。
修改后的代码如下:
import COOT.Protocol.NCI.ControlMessage import COOT.Protocol.NCI.ControlMessage.Core from System import Byte, Array # 显式绑定枚举类型,避免隐式类型转换 DestinationType = COOT.Protocol.NCI.ControlMessage.DestinationType DestinationParameter = COOT.Protocol.NCI.ControlMessage.DestinationParameter # 显式声明参数为枚举类型,阻止自动转int t = DestinationType(DestinationType.NFCEE) par = DestinationParameter(DestinationParameter.RFDiscoveryIdAndProtocol) # Byte数组构造可直接传整数列表,不需要逐个包裹Byte() val = Array[Byte]([0, 0]) # 调用目标方法 cmd = COOT.Protocol.NCI.ControlMessage.Core.NCICoreConnCreateCmd(t, par, val)
如果修改后仍然报错,可检查两点:
- NCICoreConnCreateCmd是否为实例方法:如果是实例方法,需要先实例化对应类再调用,不要直接通过类名调用
- 是否把类名和方法名混淆:如果NCICoreConnCreateCmd本身是类名(你调用的是构造函数),需要确认该类的正确命名空间路径
问题2:带ValueTuple列表的重载调用方法
C#方法中List<(DestinationParameter parameter, byte[] val)>是泛型值Tuple列表,需要先构造对应的泛型类型再传参,示例代码如下:
import COOT.Protocol.NCI.ControlMessage import COOT.Protocol.NCI.ControlMessage.Core import System.Collections.Generic as C from System import Byte, Array, ValueTuple # 绑定枚举类型 DestinationType = COOT.Protocol.NCI.ControlMessage.DestinationType DestinationParameter = COOT.Protocol.NCI.ControlMessage.DestinationParameter # 构造对应泛型类型 # 对应C#的ValueTuple<DestinationParameter, byte[]> ParamTupleType = ValueTuple[DestinationParameter, Array[Byte]] # 对应C#的List<ValueTuple<DestinationParameter, byte[]>> ParamListType = C.List[ParamTupleType] # 初始化参数列表并添加元素 param_list = ParamListType() # 可根据需要添加多个tuple元素 param_tuple = ParamTupleType( DestinationParameter(DestinationParameter.RFDiscoveryIdAndProtocol), Array[Byte]([0, 0]) ) param_list.Add(param_tuple) # 调用重载方法 t = DestinationType(DestinationType.NFCEE) cmd = COOT.Protocol.NCI.ControlMessage.Core.NCICoreConnCreateCmd(t, param_list)
内容的提问来源于stack exchange,提问作者ATR
相关产品推荐
相关产品推荐

