更改Foreach Vs中的元素

时间:2014-10-30 01:20:05

标签: powershell

为什么我会根据我是使用还是foreach获得不同的输出? 使用foreach,当您更改每个元素的值时,是不是要更改它的引用?我原以为做$ row =“d”会使该元素指向“d”,但显然它不会那样做,就好像$ row只是一个副本。

[Collections.Generic.List[String]]$list = New-Object '[Collections.Generic.List[String]]'
$list.Add("a")
$list.Add("b")
$list.Add("c")

#foreach ($row in $list)
for ($i = 0; $i -lt $list.Count; $i++)
{
#$row = "d"
$list[$i] = "d"
}

Write-Host $list

<#
Output: with foreach: "a b c"
with for: "d d d"
#>

1 个答案:

答案 0 :(得分:1)

使用foreach(和ForEach-Object)会导致循环内的元素成为副本。你可以在循环中改变它,但是一旦你超出范围它就会消失。