Tipps für Zwischendurch: Die Werte einer Liste kopieren anstatt einer Referenz auf die Liste

Das folgende Thema ist etwas spezieller, aber nicht unwichtig, da die Situation in Skripten, die irgendwelche Daten in Arrays oder Listen ablegen, auftreten wird.

Eine Liste ist eine spezielle Form von Array. Sie besitzt keine feste Größe und Methoden wie Add und Remove. Eine generische Liste ist eine Liste, die nur Elemente eines vorher festgelegten Typs enthalten kann.

Der folgende Befehl definiert eine generische Liste von Int-Werten:

Der folgende Befehl fügt ein paar Zahlen in die Liste:

Einfacher ginge es per +=, doch dann funktioniert aus mir im Moment nicht bekannten Gründen die Remove-Methode nicht mehr – wir erhalten den Fehler „Die Liste hatte eine feste Größe.“

Der folgende Befehl kopiert die Variable $Zahlen1 nach $Zahlen2

Wird jetzt per Remove-Methode ein Wert aus $Liste2 entfernt, wirkt sich das Entfernen auch auf den Inhalt von $Liste1 aus:

Der Grund ist, dass durch das Zuweisen von $Zahlen1 an $Zahlen2 nur eine Referenz kopiert, aber keine neue Liste angelegt wird.

Um diesen Effekt zu vermeiden, habe ich nur eine Lösung gefunden. Sie besteht darin, alle Werte der Liste über die Erweiterungsmethode ForEach zu kopieren:

Die folgende, eigentlich gleichwertige Variante, funktioniert nicht:

In diesem Fall führt der Aufruf von Remove() zu dem besagten Fehler.

Tief verborgen im Quellcode der PowerShell wird sich die Lösung für dieses Verhalten sicher finden lassen. Oder ich übersehe wieder einmal eine offensichtliche Kleinigkeit.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

This site uses Akismet to reduce spam. Learn how your comment data is processed.