【发布时间】:2018-12-25 05:25:20
【问题描述】:
有没有办法改变循环的集合变量不能从其循环内更新并在下一次迭代中使用新值的行为?
例如:
$items = @(1,1,1,2)
$counter = 0
foreach ($item in $items) {
$counter += 1
Write-Host "Iteration:" $counter " | collection variable:" $items
$item
$items = $items | Where-Object {$_ -ne $item}
}
$counter
如果您运行此代码,循环将执行多次。
但是,由于第一次迭代时 $items 从 1,1,1,2 更改为仅包含 2,因此循环应该只运行一次。
我怀疑这是因为集合变量 $items 没有在 foreach 部分更新。
有没有办法解决这个问题?
【问题讨论】:
-
把
foreach ($item in $items)改成foreach ($item in $items.Length),你会看到预期的结果。 -
Write-Host "Iteration:" $counter " | collection variable:" $items这行对我来说似乎有点坏了。与您的问题无关,但您可以简化这一点,我敢肯定 -
你想要完成什么?这感觉像是 X/Y 问题。
-
@colonel_claypoo 我认为您在这里混淆了观察到的行为,引用
Length不会更改$items的类型(BaseType必须更改)。 WRT 你的问题,你不能在迭代集合时修改它。请解释一下您要完成的工作 -
@mklement0:由于我的问题范围比我在这里提出的问题更大,我创建了一个新的question
标签: powershell loops foreach