6

我的源代码:

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

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

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

输出:

0
1
1

4

1 回答 1

23

当您这样做时,Powershell 会执行一些数组转换技巧+=,因此简单的解决方案是$arr.Add("z"). 然后$arr.Clear()会像你期望的那样行事。

澄清:

  1. @()是一个 Powershell 数组。它使用+=,但你不能Clear。(但是,您可以$arr = @()再次将其重置为空数组。)
  2. ArrayList是.NET 集合。它使用.Add,并且您可以使用Clear它,但是出于某种原因,如果您使用+=它,Powershell 会执行一些奇怪的数组强制。(如果有专家愿意对此发表评论,那就太棒了。)
于 2012-11-08T19:41:32.427 回答