我的源代码:
# $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 :(得分:17)
当您执行+=
时,Powershell会执行一些阵列转换技巧,因此简单的解决方案是执行$arr.Add("z")
。然后$arr.Clear()
将按照您的预期行事。
澄清:
@()
是一个Powershell数组。它使用+=
,但您不能Clear
。 (但是,您可以再次$arr = @()
将其重置为空数组。)ArrayList
是.NET集合。它使用.Add
,你可以Clear
它,但出于某种原因,如果你+=
它,Powershell会做一些奇怪的数组强制。 (如果有任何专家关心这一点,很棒。)