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

PowerShell修改数组元素问题:为何循环赋值未改变数组内容?

为什么PowerShell中修改foreach循环变量无法改变原数组?

你的直觉逻辑没问题,但这段代码达不到预期效果的原因是:ForEach($i In $List)循环里的$i只是原数组元素的值副本,而非对原数组元素的直接引用。

当你执行$i = 'ZZZ'时,只是给这个临时的副本变量重新赋值,完全不会影响原数组$List里的对应元素,所以最后输出$List还是原来的a和b。

正确修改原数组的几种方式:

  • 方式一:生成新数组替换原数组
    PowerShell会自动收集foreach循环的输出结果为数组,直接用新结果覆盖原数组:

    $List = @('a','b')
    $List = foreach ($i in $List) { 'ZZZ' }
    $List
    
  • 方式二:通过索引直接修改原数组
    使用for循环按索引访问数组元素,直接修改原数组的对应位置:

    $List = @('a','b')
    for ($idx = 0; $idx -lt $List.Count; $idx++) {
        $List[$idx] = 'ZZZ'
    }
    $List
    
  • 补充说明
    如果数组元素是引用类型(比如自定义对象),修改对象的属性会影响原数组中的元素,但直接给循环变量赋值依然只是修改副本,不会改变原数组的元素引用。

内容的提问来源于stack exchange,提问作者Ryan.James

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:54:49