ArrayList und Boxing
-
Guten tag,
Ich bekomme per Reflection ausgelesen ein Object. In diesem steckt eine ArrayList (oder etwas anderes, aber das gibt keine Probleme). In dieser Arraylist die als Object Geboxed ist sind natürlich wieder mehrere Objecte enthalten, darunter auch Null objecte!! Jetzt mache ich Folegendes:
object value = Entry.Value;
//Remove the NULL Elements
for (int i = 0; i < (value as object[]).Length; i++)
{if ((Entry.Value as ArrayList)[i] == null)
(Entry.Value as ArrayList).RemoveAt(i);
}Da bei jedem Cast
(Entry.Value as ArrayList)[i]
eine NullreferenzException geworfen wird. Was soll/kann ich da tun?
-
Wenn object (also Entry.Value) im Schleifenkopf noch ein object[] ist, wieso sollte es dann ein paar Zeilen später plötzlich ein ArrayList sein?
Vermutlich sollte also in der Bedingung auch eher (value as object[])[i] stehen...
-
Danke für die schnelle Antwort. Aber so habe ich es auch schon probiert:
object value = Entry.Value;//Remove the NULL Elements
for (int i = 0; i < (value as object[]).Length; i++)
{
if ((value as Object[])[i] == null)
((value as Object[]) as ArrayList).RemoveAt(i);}
Tut mir leid, aber aus einem Object[] kann ich ja keine Elemente löschen oder? und daher muss ich es in eine Art Array casten.
-
datenverlust schrieb:
In dieser Arraylist die als Object Geboxed ist
Äh, da liegt ein Missverständnis vor. Boxing funktioniert nur für Wertetypen, 'ArrayList' ist aber ein Referenztyp.
Und Du kannst nicht einfach ein 'object[]' in einen anderen Typ casten, sowas geht nicht. In C# gibt es nur upcasts und downcasts, was Du vorhast, wäre ein lateraler Cast. Dementsprechend geht das, was Du Dir vorstellst, einfach nicht. Du kannst aber aus den Objekten eine List konstruieren und dann verwenden.
List<object> list = new List<object>(value as object[]); // und jetzt mit 'list' arbeiten.
-
Danke, dann muss ich wohl was basteln.