You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pythonnet:Python与C#对象(列表/字典)互转的简便方法咨询

Pythonnet中Python与.NET类型互转的简便方法

一、自动将Python对象转换为C#参数

pythonnet自带基础自动类型转换能力,多数常见类型无需手动逐个处理:

  • 基本数值类型:Python的int、float可直接传入期望Int32、Double等.NET值类型的C#函数,框架会自动完成转换,不用手动调用Double(123)这类构造器。
  • 泛型集合:创建指定类型的.NET集合(如List<string>),直接用对应.NET集合的构造器传入Python序列即可:
    import clr
    clr.AddReference("System.Collections")
    from System.Collections.Generic import List, Dictionary
    
    # Python列表转C# List<string>
    py_str_list = ["apple", "banana"]
    cs_str_list = List[str](py_str_list)
    
    # Python字典转C# Dictionary<int, string>
    py_dict = {1: "one", 2: "two"}
    cs_dict = Dictionary[int, str](py_dict)
    
  • 若需强制转换特定类型,可使用clr.Convert方法:
    import clr
    from System import Double
    py_num = 123
    cs_double = clr.Convert(py_num, Double)
    

二、将C#返回对象转换为Python类型

对于.NET返回的对象,可通过以下方式快速转为Python原生类型:

  • .NET集合转Python集合:
    • List<T>、ArrayList等可迭代.NET集合,直接用list()包裹即可转为Python列表:py_list = list(cs_list)
    • Dictionary<K,V>直接用dict()转为Python字典:py_dict = dict(cs_dict)
  • 自定义C#对象转Python字典:
    可通过反射提取对象的公共属性,实现通用转换函数:
    def cs_object_to_py_dict(cs_obj):
        py_dict = {}
        for prop in cs_obj.GetType().GetProperties():
            # 递归处理嵌套的C#对象
            value = prop.GetValue(cs_obj)
            if value is not None and hasattr(value, "GetType"):
                py_dict[prop.Name] = cs_object_to_py_dict(value)
            else:
                py_dict[prop.Name] = value
        return py_dict
    
    调用示例:py_obj_dict = cs_object_to_py_dict(cs_custom_object)

内容的提问来源于stack exchange,提问作者Jason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:45:48