我的源代码:
# $arr = @(); results in same behaviour
$arr = New-Object System.Collections.ArrayList;
$arr.Count;
$arr += "z";
$arr.Count;
$arr.Clear();
$arr.Count;
Run Code Online (Sandbox Code Playgroud)
输出:
0
1
1
Dan*_*tch 18
当你这么做时+=,Powershell会做一些阵列式的诡计,所以简单的解决方案就是做$arr.Add("z").然后$arr.Clear()会像你期望的那样行事.
澄清:
@()是一个Powershell数组.它使用+=,但你不能Clear.(但是,您可以$arr = @()再次将其重置为空数组.)ArrayList是.NET集合.它使用.Add,你可以Clear,但由于某种原因,如果你+=,Powershell做一些奇怪的阵列强制.(如果有任何专家对此发表评论,真棒.)