mojego kodu źródłowego:PowerShell tablica nie jest czyszczony
# $arr = @(); results in same behaviour
$arr = New-Object System.Collections.ArrayList;
$arr.Count;
$arr += "z";
$arr.Count;
$arr.Clear();
$arr.Count;
wyjściowa:
0
1
1
mojego kodu źródłowego:PowerShell tablica nie jest czyszczony
# $arr = @(); results in same behaviour
$arr = New-Object System.Collections.ArrayList;
$arr.Count;
$arr += "z";
$arr.Count;
$arr.Clear();
$arr.Count;
wyjściowa:
0
1
1
PowerShell robi niektóre odlewania tablica sztuczek kiedy robisz +=
, więc proste rozwiązanie jest zrobić $arr.Add("z")
. Wtedy $arr.Clear()
będzie działać tak, jak oczekujesz.
celu wyjaśnienia:
@()
jest tablicą PowerShell. Używa on +=
, ale nie można go ustawić na Clear
. (Możesz jednak ponownie wykonać $arr = @()
, aby zresetować go do pustej tablicy.)ArrayList
to kolekcja .NET. Używa ona .Add
, i możesz Clear
go, ale z jakiegoś powodu, jeśli to +=
, Powershell wykonuje dziwne przymusu tablicy. (Jeśli eksperci starają się to skomentować, są niesamowite.)Tak, to jest trudne;) Dzięki! Dla tych, którzy mają mnóstwo kodu za pomocą '+ =': możesz również ponownie zainicjować zmienną: '$ arr = @();' – ComFreek
Ale dlaczego otrzymuję wyjątek 'Kolekcja o stałym rozmiarze' przy próbie dodania element: '$ arr = @(); $ arr.Add ("z"); 'Jeśli użyję klasy ArrayList, nie pojawi się. – ComFreek
Która wersja Powershell? Kiedy uruchomię to, '$ arr' zostanie rzucone do' System.Array' po '$ arr + =" z "', więc gdy wołam 'Clear()', pojawia się następujący błąd: 'Wywołanie metody nie powiodło się, ponieważ [System.Object []] nie zawiera metody o nazwie "Wyczyść" ' – David
@Dostępne PS3 w systemie Windows 8 RTM. – ComFreek
Ah - Używam v2 na Win 7. – David