2010-03-19 5 views
4

Je suis sûr que ce soit une solution facile et je ne peux pas le trouver, mais va ici:Passez un tableau de IronRuby à C#

J'ai une classe C# (appelons-le test) dans un ensemble (disons SOTest.dll). Voici quelque chose le long des lignes de ce que je fais:

private List<string> items; 

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

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

Dans l'interpréteur IronRuby je lance:

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

je reçois une erreur semblable si je fais l'argument d'une « liste < chaîne > ',' Liste < objet> 'ou' chaîne [] '.

Quelle est la syntaxe appropriée? Je ne peux trouver nulle part un mappage documenté des types (car il est probablement trop compliqué à définir dans certains scénarios, compte tenu de ce que Ruby peut faire).

EDIT:

Il ne ressemble pas à ce que je voulais faire est possible. Je devrai inclure l'assembly IronRuby dans le projet .NET afin que l'entrée puisse être un type IronRuby pour garder l'interface de script plus propre.

Si quelqu'un trouve un moyen de le faire fonctionner comme je le voulais initialement, je vais changer la réponse acceptée.

Répondre

3

Vous devrez construire la liste un peu différemment:

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

Est-ce vraiment vrai? Le 'List ' a un constructeur qui prend un 'IEnumerable ', ce qu'un tableau IronRuby doit certainement supporter. –

+0

Et comment créer un tableau de chaînes? – Dmitriy

1

Jamais utilisé, mais je devine quelque chose comme:

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

C'est, construire un List<string> du tableau. Je doute de la partie System::Collections::Generic::List(string), mais à en juger par le message d'erreur, c'est comment donner le nom complet d'un List<string> dans IronRuby.

+0

Étonnamment, cela ne fonctionne pas (TypeError: ne peut pas convertir en tableau Fixnum). Je pense que RubyArray hérite de IEnumerable, alors j'ai pensé que ça marcherait. – cgyDeveloper

+0

On dirait qu'il essaie d'appeler la mauvaise surcharge du constructeur List . Peut-être que cela ne fonctionne pas encore dans IronRuby. –