将数组从IronRuby传递给C#

时间:2010-03-19 23:25:28

标签: c# ironruby

我确信这是一个简单的解决方案,我找不到它,但是这里有:

我在程序集中有一个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&lt; string&gt;','List&lt;对象&gt;'或'string []'。

正确的语法是什么?我无法在任何地方找到文档的类型映射(因为在某些情况下,根据Ruby可以做的事情来定义它可能太复杂了。)

编辑:

看起来我不想做的事情是可能的。我将不得不在.NET项目中包含IronRuby程序集,因此输入可以是IronRuby类型,以保持脚本界面更清晰。

如果有人想出办法使我的工作方式达到最初的目的,我会更改已接受的答案。

2 个答案:

答案 0 :(得分:3)

您必须以不同的方式构建列表:

ls = System::Collections::Generic::List.of(String).new
ls.add("Peaches")
ls.add "Pulms"

答案 1 :(得分:1)

从未使用它,但我猜的是:

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

即,从数组中构造List<string>。我对System::Collections::Generic::List(string)部分感到怀疑,但从错误消息判断,这是如何在IronRuby中提供List<string>的完全限定名称。