开发者

Pass an array from IronRuby to C#

I'm sure this is an easy fix and I just can't find it, but here goes:

I have a C# class (let's call it Test) in an assembly (let's say SOTest.dll). Here is something along the lines of what I'm doing:

private List<string> items;

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

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

I开发者_高级运维n the IronRuby interpreter I run:

>>> 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)

I get a similar error whether I make the argument a 'List< string >', 'List< object >' or 'string[ ]'.

What is the proper syntax? I can't find a documented mapping of types anywhere (because it's likely too complicated to define in certain scenarios given what Ruby can do).

EDIT:

It doesn't look like what I was trying to do is possible. I'll have to include the IronRuby assembly in the .NET project so the input can be an IronRuby type to keep the scripting interface cleaner.

If anybody comes up with a way to make it work how I originally wanted, I'll change the accepted answer.


You will have to construct the list a bit differently:

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


Never used it, but I'm guessing something like:

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

That is, construct a List<string> from the array. I'm doubtful of the System::Collections::Generic::List(string) part, but judging from the error message, that's how to give the fully qualified name of a List<string> in IronRuby.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜