Seite 1 von 1

String.Join() liefert IronPython.Runtime.List zurück

Verfasst: Donnerstag 6. September 2012, 10:34
von Fortuna
Hallo,

ich habe ein mehrdimensionales Array welches wie folgt aussieht:

Code: Alles auswählen

mStrArrOptions = {
	"Foobar.Test": {
		0: "Value1",
		1: "Value2",
		2: "Value3"
	},
	"Test.Foobar": {
		0: "Value1",
		1: "Value2",
		2: "Value3"
	},
}
Wenn ich nun eine Zeichenkette mittels String.Join() erstellen will, liefert er mit "IronPython.Runtime.List" zurück.

Code: Alles auswählen

string = String.Join(", ", mStrArrOptions[strContent].Values)
Ergebnis: IronPython.Runtime.List
Gewünschtes Ergebnis: Value1, Value2, Value3
Ich habe keine Ahnung warum und per Suche finde ich auch nichts, vielleicht könnt ihr mir helfen?

Re: String.Join() liefert IronPython.Runtime.List zurück

Verfasst: Donnerstag 6. September 2012, 12:38
von cofi
Nun, in Python wuerde das so aussehen:

Code: Alles auswählen

In [1]: options = {
   ...:         "Foobar.Test": {
   ...:                 0: "Value1",
   ...:                 1: "Value2",
   ...:                 2: "Value3"
   ...:         },
   ...:         "Test.Foobar": {
   ...:                 0: "Value1",
   ...:                 1: "Value2",
   ...:                 2: "Value3"
   ...:         },
   ...: }

In [2]: ', '.join(options['Foobar.Test'].values())
Out[2]: 'Value1, Value2, Value3'
Und ich denke auch in IronPython ist das kein mehrdimensionales Array sondern ein Dictionary.

Re: String.Join() liefert IronPython.Runtime.List zurück

Verfasst: Donnerstag 6. September 2012, 12:43
von BlackJack
@Fortuna: `String.Join` ist eine .NET-Methode, die wandelt anscheinend Datentyp der für die Implementierung von Python's `list`-Typ in eine Zeichenkette um und liefert deshalb den Typnamen.

Wobei schon irgendwelche Magie beim Zugriff auf `Values` passieren muss, denn so ein Attribut kennt Python's `dict`-Typ gar nicht. Da gibt es `values` und das ist eine Methode die man aufrufen muss.

Re: String.Join() liefert IronPython.Runtime.List zurück

Verfasst: Donnerstag 6. September 2012, 16:15
von lunar
@BackJack Die Eigenschaft "Values" ist das Pendant zu ".values()" bei der "Dictionary"-Klasse der .NET-Standardbibliothek. Vielleicht ist ein Python-Dictionary in IronPython gleichzeitig auch ein .NET-Dictionary.

@Fortuna Wenn Du IronPython verwendest, musst Du schon Python programmieren, und insbesondere halt auch dessen Standard-Bibliothek verwenden. C# in anderer Syntax zu versuchen, wird nicht funktionieren.

Re: String.Join() liefert IronPython.Runtime.List zurück

Verfasst: Freitag 7. September 2012, 07:15
von BlackJack
@Lunar: Ich dachte das IronPython vielleicht auch etwas Magie betreibt wie Jython. Da kann man zum Beispiel ``a.x`` und ``a.x = 42`` schreiben wenn das Java-Objekt `getX()`- und `setX()`-Methoden hat, damit der Quelltext nicht so nach Java sondern mehr nach Python aussieht.

Re: String.Join() liefert IronPython.Runtime.List zurück

Verfasst: Freitag 7. September 2012, 09:08
von lunar
@BlackJack .NET hat echte Eigenschaften ("Dictionary.Values" ist keine Methode), insofern ist diese Art von Magie eigentlich nicht nötig.