公司网站怎么做关键词,海报设计网站免费,中山商城网站建设,做海报的网站什么编辑器【pythonnet详解】—— Python 和 .NET 互操作的库_pythonnet 详细使用-CSDN博客
Python中动态调用C#的dll动态链接库中方法_python 如何调用c# dll-CSDN博客 需求#xff1a;Python调用并传Listfloat类型参数给.Net 起初#xff1a;直接 # 创建一个Python浮点数…【pythonnet详解】—— Python 和 .NET 互操作的库_pythonnet 详细使用-CSDN博客
Python中动态调用C#的dll动态链接库中方法_python 如何调用c# dll-CSDN博客 需求Python调用并传Listfloat类型参数给.Net 起初直接 # 创建一个Python浮点数列表 py_float_list [0.23, 0.34, 0.45]但是报错
def callCS(model_url, methodName, argsType, argsVal, returnType, addition):# 找到c#程序集clr.FindAssembly(model_url)# 解析参数获取命名空间、类名和判断是否为静态方法的标识namespace, className, static parseAddition(addition)# 解析参数argsParsedArr parsePyArgs(argsVal, argsType)print(argsParsedArr)# 创建一个Python浮点数列表py_float_list [0.23, 0.34, 0.45]listValue py_float_list# 设置模块【命名空间】dll clr.AddReference(namespace)## #从指定命名空间导入类# # from ClassLibrary1 import TestCsharp#动态导入模块module_1 importlib.import_module(namespace)#获取命名下的指定类class_1 getattr(module_1, className)#判断是否为静态方法if static 1:method2 getattr(class_1, methodName)# 调用静态方法并打印print(method2(argsParsedArr[0],listValue))else:# 实例化my_instance class_1()# 获取非静态方法method1 getattr(my_instance, methodName)# 调用非静态方法并打印print(method1(*argsParsedArr))
Python.Runtime.PythonException: list value cannot be converted to System.Collections. Generic.List1[System.Single]大概可以理解为python中list无法转化为.Net中ListT[T为泛型]
然后根据网上博客和AI工具推荐
在Python中你需要导入C# DLL并使用pythonnet提供的机制来调用C#方法。但是由于pythonnet不直接支持C#的泛型列表你需要将Python列表转换为C#可以理解的数组或其他集合类型。
import clr
# 加载C# DLL假设DLL名为MyCSharpLibrary.dll并且位于当前工作目录
clr.AddReference(MyCSharpLibrary)
from MyCSharpLibrary import MyCSharpClass # 创建一个Python浮点数列表
py_float_list [1.23, 2.34, 3.45] # 将Python列表转换为C#可以理解的数组这里我们使用float数组
float_array (clr.Convert(item, System.Single) for item in py_float_list)
float_list System.Array[System.Single](list(float_array)) # 调用C#方法传递float数组或转换为Listfloat如果需要
MyCSharpClass.ProcessFloatList(float_list) # 注意如果C#方法期望Listfloat而不是数组你可能需要创建一个List并填充它
# float_list_csharp System.Collections.Generic.List[System.Single]()
# for item in py_float_list:
# float_list_csharp.Add(clr.Convert(item, System.Single))
# MyCSharpClass.ProcessFloatList(float_list_csharp)---------------------------------------------------------------------------import clr # 加载C# DLL
clr.AddReference(MyCSharpLibrary)
import MyCSharpLibrary # 创建一个Python浮点数列表
py_float_list [1.23, 2.34, 3.45] # 将Python列表转换为C# float数组
float_array System.Array[System.Single](py_float_list) # 注意这里直接使用py_float_list可能不起作用
# 正确的做法是使用列表推导式或循环来转换每个元素
float_array (System.Single(x) for x in py_float_list)
float_array System.Array[System.Single](list(float_array)) # 将生成器转换为列表再转换为数组 # 调用C#方法传递float数组
MyCSharpLibrary.MyCSharpClass.ProcessFloatArray(float_array)
此时报错无法导入System模块(.Net系统工作空间 然后在网上看到博客(试了无效) 看来官方文档的确试可以导入System命名空间是不是python、pythonnet、.net版本不匹配或者环境变量设置不正确待查借助官方文档
pythonnet官方文档 https://pythonnet.github.io/pythonnet/python.html