我确定这是一个简单的解决方法,但我找不到它,但这里有:
我在程序集中(比如说 SOTest.dll)中有一个 C# 类(我们称之为 Test)。这是我正在做的事情:
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< string >”、“List< object >”还是“string[]”,都会出现类似的错误。
什么是正确的语法?我在任何地方都找不到记录在案的类型映射(因为鉴于 Ruby 可以做什么,在某些情况下定义它可能太复杂了)。
编辑:
看起来我试图做的事情是不可能的。我必须在 .NET 项目中包含 IronRuby 程序集,以便输入可以是 IronRuby 类型,以保持脚本界面更简洁。
如果有人想出一种方法让它按照我最初想要的方式工作,我会改变接受的答案。