PowerShell函数返回ArrayList后元素数量翻倍的原因咨询
问题原因与解决方案
你的问题出在[System.Collections.ArrayList]的Add()方法特性,以及PowerShell函数的返回机制:
ArrayList.Add()方法执行后,会返回新添加元素的索引位置(从0开始,循环10次就会输出10个数值:0、1...9)- PowerShell函数默认会收集所有未被捕获的输出作为返回结果,你在循环里调用
$arr_obj.Add($tmp_obj)时没有处理这个返回值,导致这些索引数值和最终的$arr_obj数组一起被返回,所以接收变量$Erg的元素数变成了10个对象+10个索引值=20个。
修复方法
只需要捕获Add()方法的返回值,避免它被混入函数输出即可,最简单的方式是把返回值赋值给$null:
function Create_obj { return [pscustomobject] @{ 'Tag1' = [STRING]'' 'Tag2' = [STRING]'' } } function Get-Obj_Array { $arr_obj=[System.Collections.ArrayList]@() $i=1 for(; $i -le 10; $i++) { $tmp_obj = Create_obj # 捕获Add方法的返回值,避免混入输出 $null = $arr_obj.Add($tmp_obj) $arr_obj[$i-1].Tag1 = $i $arr_obj[$i-1].Tag2 = 'Num' + $i } Write-Host $arr_obj.count return $arr_obj } $Erg = Get-Obj_Array $Erg.Count $Erg | Format-Table
修改后,$Erg.Count会正确返回10,输出的也只有10个自定义对象。
内容的提问来源于stack exchange,提问作者TheRob87
相关产品推荐
相关产品推荐

