2010-03-19 69 views
4

數組我敢肯定,這是一個簡單的辦法,我只是無法找到它,但這裏有雲:妙傳IronRuby的爲C#

我有一個C#類(姑且稱之爲試驗)在裝配(讓我們說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) 

我收到了類似的錯誤我是否做出論證了「列表<串>','列表< object>'或'string []'。

什麼是正確的語法?我找不到任何地方類型的文檔映射(因爲在給定Ruby的某些情況下可能會過於複雜)。

編輯:

它看起來並不像我所試圖做的是可能的。我必須在.NET項目中包含IronRuby程序集,以便輸入可以是IronRuby類型以保持腳本接口更清晰。

如果有人想出一種方法讓它工作,我最初想要的,我會改變接受的答案。

回答

3

您必須構建列表有點不同:

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

這是真的嗎?該名單''有一個構造函數的IEnumerable的'',這肯定了IronRuby的陣列必須支持。 – 2010-03-21 01:07:12

+0

如何創建一個字符串數組? – Dmitriy 2011-04-02 08:20:24

1

從未使用過它,但我猜是這樣的:

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

也就是說,構建從陣列List<string>。我懷疑的System::Collections::Generic::List(string)部分,但是從錯誤信息來看,這就是如何給在IronRuby的一個List<string>的全名。

+0

出人意料的是,這不起作用(類型錯誤:不能將數組Fixnum對象)。我認爲RubyArray繼承自IEnumerable,所以我認爲它會起作用。 – cgyDeveloper 2010-03-23 18:11:35

+0

聽起來就像它試圖調用列表構造函數的錯誤超載。也許這在IronRuby中還不行。 – 2010-03-23 19:18:47