为什么我会根据我是使用还是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"
#>
答案 0 :(得分:1)
使用foreach
(和ForEach-Object
)会导致循环内的元素成为副本。你可以在循环中改变它,但是一旦你超出范围它就会消失。