Инициализировать C # List <T>из IronPython? - PullRequest
3 голосов
/ 06 августа 2011

У меня относительно глубокое дерево объектов в 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

Есть идеи?

Ответы [ 2 ]

14 голосов
/ 06 августа 2011

У вас есть пара вопросов здесь.Во-первых, вы устанавливаете bar для объекта класса Class2 (классы являются первоклассными объектами в Python).

Вы намеревались создать экземпляр, как это (с круглыми скобками):

bar = Class2()

Чтобы создать List<T> в IronPython, вы можете сделать:

from System.Collections.Generic import List

# Generic types in IronPython are supported with array-subscript syntax
bar.ClassOnes = List[Class1]()
bar.ClassOnes.Add(Class1())
6 голосов
/ 06 августа 2011

Сделал ошибку в Class2 () - это то, что я получаю за создание примера вместо публикации реального кода !!!

Для чего это стоит - я смог инициализировать список с реальными экземплярамикак это:

from System.Collections.Generic import List

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

Большое спасибо Кэмерон!

...