为什么添加到 ArrayList 会计算传递给它的内容?

Why does adding to an ArrayList count whats being passed to it?

大家好,晚上好

我正在寻找在添加到 ArrayList 时是否可以在抑制计数方面获得一些帮助。出于某种原因,即使在 google 搜索之后我还是不明白,我就是无法抑制计数。

[System.Collections.ArrayList]$AStuff = @()
[System.Collections.ArrayList]$CStuff = @()
[System.Collections.ArrayList]$Rest = @()

switch -Wildcard (gci C:\users\abrah\OneDrive\Desktop){
    "D*" {$AStuff.Add($_)}
    "C*" {$CStuff.Add($_)}
    Default {$Rest.Add($_)}
    }

for($i=0; $i -lt ($AStuff.Count + $CStuff.Count + $Rest.Count); $i++){
    [pscustomobject]@{
        "Letter A" = $AStuff[$i]
        "Letter C" = $CStuff[$i]
        "Rest " = $Rest[$i]
    }
}

输出是:


0
1
0
1
0
1
2
3
2
3
4

Letter A Letter C                  Rest                            
-------- --------                  -----                           
dir1     CFR-2008-title38-vol1.pdf Test                            
dir2     cs.csv                    v1                              
         CSV                       error.png                       
         csvv.csv                  Screenshot 2021-01-09 195943.png
                                   v2.pdf                          
                                                 

有人可以告诉我它输出计数的原因吗?

如果事情真的很简单,请不要回答,简单的解释就可以了,如果是这样的话我应该能够解决它。

这只是因为 Add 方法 returns 一个 int :

$a =@()
$a.Add

OverloadDefinitions                 
-------------------                 
int IList.Add(System.Object value) 

所以在你的情况下你可以使用 | out-null.

来避免它
$AStuff.Add($_) | out-null