Передать массив из IronRuby в C # - PullRequest
4 голосов
/ 20 марта 2010

Я уверен, что это легко исправить, и я просто не могу его найти, но здесь идет речь:

У меня есть класс C # (назовем его Test) в сборке (скажем, SOTest.dll). Вот что-то вроде того, что я делаю:

private List<string> items;

public List<string> list_items()
{
    return this.items;
}

public void set_items(List<string> new_items)
{
    this.items = new_items;
}

В интерпретаторе IronRuby я запускаю:

>>> require "SOTest.dll"
true
>>> include TestNamespace
Object
>>> myClass = Test.new
TestNamespace.Test
>>> myClass.list_items()
['Apples', 'Oranges', 'Pears']
>>> myClass.set_items ['Peaches', 'Plums']
TypeError: can't convert Array into System::Collections::Generic::List(string)

Я получаю похожую ошибку, независимо от того, делаю ли я аргумент 'List ', 'List ' или 'string []'.

Какой правильный синтаксис? Я нигде не могу найти документированное сопоставление типов (потому что оно, вероятно, слишком сложно для определения в определенных сценариях с учетом того, что может делать Ruby).

EDIT:

Не похоже, что то, что я пытался сделать, возможно. Мне придется включить сборку IronRuby в проект .NET, чтобы входные данные могли быть типа IronRuby, чтобы сохранить интерфейс сценариев более чистым.

Если кто-нибудь придумает способ заставить его работать так, как я хотел, я изменю принятый ответ.

Ответы [ 2 ]

3 голосов
/ 20 марта 2010

Вам придется составить список немного по-другому:

ls = System::Collections::Generic::List.of(String).new
ls.add("Peaches")
ls.add "Pulms"
1 голос
/ 20 марта 2010

Никогда не использовал, но я предполагаю что-то вроде:

myClass.set_items(System::Collections::Generic::List(string).new ['Peaches', 'Plums'])

То есть, построить List<string> из массива. Я сомневаюсь в части System::Collections::Generic::List(string), но, судя по сообщению об ошибке, именно так можно дать полное имя List<string> в IronRuby.

...