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
相关产品推荐
相关产品推荐

