PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Reflection & Array || ArrayList


Scavi
03.09.2003, 13:56
Hallo !

Ich lese mittels Reflection den Typ und den Wert eines Properties (Field) einer Klasse aus. Nun kann aber der Datentyp dieses Feldes eine ArrayList oder ein Array aus irgendeinem Datentyp sein. Wie kann ich nun auf die Werte dieser Datentypen zugreifen ? Ich nutze C# !


Cord Worthmann
03.09.2003, 20:21
der datentyp einer arraylist ist immer object - da es möglich ist, verschiedene datentypen gleichzeitig zu integrieren.
innerhalb einer arraylist können also durchaus verschiedene datentypen auftauchen...
...die einzige möglichkeit, die ich da sehe, wäre, die arraylist in einer schleife zu durchlaufen, und mit GetType() den type abzufragen.


grtz
chief

Pulpapex
03.09.2003, 22:28
Ich weiss nicht ob das gefragt ist, aber zum Auslesen von Elementen aus einem Object, dass entweder Array oder ArrayList sein kann, braucht man eigentlich keine Reflection. Beide Typen implementieren IList, d.h. man kann ganz normal mit eckigen Klammern arbeiten. Den Array-Type muss man explizit nach IList casten, da hier die IList-Methoden interface-explizit angegeben sind. Kleines Beispiel:
Array array = new object[1];

// Geht nicht.
object e = array[0];

// Geht.
IList list = (IList)array;
e = list[0];

Gruß
Pulpapex

Scavi
04.09.2003, 08:41
Hier mal der Code, zum verstehen, was ich meine ;) :

FieldInfo[] fields = myObject.GetType().GetFields();
if (fields != null)
{
foreach (FieldInfo f in fields)
{
Type t = f.FieldType;
object o = f.GetValue(myObject);
// Jetzt könnte o ja ein Array, eine ArrayList
// oder ähnliches sein. Wie greife ich auf dessen
// Werte zu ?
}
}

Pulpapex
04.09.2003, 18:09
Na dann wars ja doch richtig.
object value = field.GetValue(myObject);
IList list = (IList)value;

foreach(object entry in list) {
// Einträge verarbeiten.
}

Scavi
04.09.2003, 20:33
Thx, das funzt !