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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Fortuna
User
Beiträge: 4
Registriert: Montag 3. September 2012, 10:37

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?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
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.
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.
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.
lunar

@BlackJack .NET hat echte Eigenschaften ("Dictionary.Values" ist keine Methode), insofern ist diese Art von Magie eigentlich nicht nötig.
Antworten