You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 01:05:03