2012-11-08 16 views
5

Benim kaynak kodu temizlenmez:Powershell dizisi

# $arr = @(); results in same behaviour 
$arr = New-Object System.Collections.ArrayList; 

$arr.Count; 
$arr += "z"; 

$arr.Count; 
$arr.Clear(); 
$arr.Count; 

Çıktı:

0
1
1

+0

Hangi sürüm Powershell? Bunu çalıştırdığımda, $ arr '' $ arr + = "z" 'yi takip ederek' System.Array' atar, böylece Clear() 'yi çağırdığımda şu hatayı alıyorum:' Yöntem çağırma başarısız oldu çünkü [System.Object []], Windows 8 RTM'de 'Temizle' – David

+0

@David PS 3 adlı bir yöntem içermiyor. – ComFreek

+0

Ah - Win 7'de v2 kullanıyorum. – David

cevap

16

Powershell yapan bazı dizi-döküm sen += yaptığınızda kolay çözüm $arr.Add("z") yapmaktır böylece, hile. Sonra $arr.Clear() beklediğiniz gibi davranacaktır.

açıklamak için:

  1. @() bir PowerShell dizidir. += kullanıyor, ancak Clear yapamazsınız. (Ancak, boş bir diziye sıfırlamak için $arr = @() yeniden yapabilirsiniz.)
  2. ArrayList .NET koleksiyonudur. .Add kullanır ve Clear yapabilirsiniz, ancak bazı nedenlerden dolayı +=, Powershell bazı garip dizi zorlama yapar. (Herhangi bir uzman buna yorumda bulundu, harika.)
+0

Evet, zor;) Teşekkürler! '+ =' Kullanarak kod tonuna sahip olanlar için, ayrıca şu değişkeni de yeniden başlatabilirsiniz: '$ arr = @();' – ComFreek

+0

Ama neden toplama yapmaya çalışırken 'Koleksiyon bir sabit boyutta oldu? ' bir öğe: '$ arr = @(); $ arr.Add ("z"); 'ArrayList sınıfını kullanırsam, görünmez. – ComFreek