2012-11-08 63 views
5

我的源代碼:PowerShell的數組不會被清除

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

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

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

輸出:

0
1
1

+0

哪個版本的Powershell?當我運行這個時,'$ arr'會在'$ arr + =「z」'後面強制轉換爲'System.Array',所以當我調用Clear()時,我得到以下錯誤:'方法調用失敗,因爲[System.Object []]在Windows 8 RTM上不包含名爲'Clear'的方法。 – David

+0

@David PS 3。 – ComFreek

+0

啊 - 我在Win 7上使用v2。 – David

回答

16

PowerShell將一些陣列鑄造掛羊頭賣狗肉,當你做+=,所以最簡單的辦法是做$arr.Add("z")。然後$arr.Clear()將按照您的預期行事。

澄清:

  1. @()是Powershell的陣列。它使用+=,但你不能Clear它。 (但是,您可以再次執行$arr = @()以將其重置爲空陣列。)
  2. ArrayList是.NET集合。它使用.Add,你可以Clear它,但由於某種原因,如果你+=它,Powershell做一些奇怪的數組強制。 (如果有專家關心這個評論,真棒。)
+0

是的,這很棘手;)謝謝!對於那些使用'+ ='的代碼有很多的人來說:你也可以重新初始化變量:'$ arr = @();' – ComFreek

+0

但是爲什麼我試圖添加一個'Collection是一個固定大小的異常一個項目:'$ arr = @(); $ arr.Add(「z」);'如果我使用ArrayList類,它不會出現。 – ComFreek