【问题标题】:Initialize C# List<T> from IronPython?从 IronPython 初始化 C# List<T>?
【发布时间】:2023-03-23 19:15:01
【问题描述】:

我在 C# 中有一个相对较深的对象树,需要从 IronPython 初始化。

我是 python 新手,正在为数组的初始化而苦苦挣扎。

举个例子——假设我在 C# 中有这些类

public class Class1
{
    public string Foo {get;set;}
}

public class Class2
{
    List<Class1> ClassOnes {get;set;}
}

我可以像这样在 Class2 中初始化数组:

var class2 = new Class2(
    ClassOnes = new List<Class1>()
    {
        new Class1(Foo="bar")
    });

在 IronPython 中 - 我正在尝试这个:

bar = Class2
bar.ClassOnes = Class1[Class1(Foo="bar")]

但我总是收到这样的信息:

预期的 Array[Type],得到 Class1

有什么想法吗?

【问题讨论】:

    标签: ironpython


    【解决方案1】:

    在 Class2() 上犯了一个错误——这就是我制作示例而不是发布真实代码的结果!!!

    为了它的价值 - 我能够用这样的实际实例初始化列表:

    from System.Collections.Generic import List
    
    bar.ClassOnes = List[Class1]([Class1(Foo="bar")])
    

    非常感谢卡梅隆!

    【讨论】:

    • 没问题 ;-) sn-p 很有趣,它正在创建一个 Python 列表,其中包含一个对象(一个新的 Class1 对象),List&lt;T&gt; 构造函数似乎接受它作为 IEnumerable 来创建项来自。酷!
    【解决方案2】:

    这里有几个问题。首先,您将 bar 设置为类对象 Class2(类是 Python 中的第一类对象)。

    你的意思是创建一个实例,像这样(带括号):

    bar = Class2()
    

    要在 IronPython 中创建 List&lt;T&gt;,您可以:

    from System.Collections.Generic import List
    
    # Generic types in IronPython are supported with array-subscript syntax
    bar.ClassOnes = List[Class1]()
    bar.ClassOnes.Add(Class1())
    

    【讨论】:

    • 如果你在这里 - 我会请你喝啤酒。
    猜你喜欢
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多