意识到它可能不是最佳实践,是否有任何其他理由不在foreach中重用当前项变量:
foreach ($a in $something)
{Write-host $a}
.
.
.
foreach ($a in $somethingelse)
{Write-host $a}
换句话说,在第二种情况下总是最好使用不同的变量($ b?)
答案 0 :(得分:3)
作为briantist提到这是好的。但是,当我进行foreach
循环时,我倾向于将其指定为您从中获取的任何内容。我发现这样可以让你更容易理解。
#Example 1
foreach ($item in $array)
{Write-Host $item}
#Example 2
foreach ($user in $userList)
{Write-Host $user}
#Example 3
foreach ($breed in $dogBreed)
{Write-Host $breed}
答案 1 :(得分:2)
这没什么不对。变量$a
将始终设置为foreach
循环体内的当前项。
答案 2 :(得分:1)
这不是一个想法的一个原因是变量$a
在重新分配之前保留它的值(在指定的范围内)。这可能听起来不是一个大问题,但偶尔PowerShell做了一些意想不到的事情,并且不值得花时间进行故障排除以找出类似的东西。考虑一下这个function
:
function reuse-vars {
$arrayA = 0..3
$arrayB = 10..13
$arrayC = 20..23
foreach ( $a in $arrayA ){
Write-Host "`$a is $a"
Write-Host "`$b is $b"
Write-Host "`$c is $c"
}
foreach ( $b in $arrayB ){
Write-Host "`$a is $a"
Write-Host "`$b is $b"
Write-Host "`$c is $c"
}
foreach ( $c in $arrayC ){
Write-Host "`$a is $a"
Write-Host "`$b is $b"
Write-Host "`$c is $c"
}
}
$a
将保留上一次foreach
次迭代的值,直到重新分配,包括嵌套的foreach
内或者是否为序列式。
C:\> reuse-vars
$a is 0
$b is
$c is
$a is 1
$b is
$c is
$a is 2
$b is
$c is
$a is 3
$b is
$c is
$a is 3
$b is 10
$c is
$a is 3
$b is 11
$c is
$a is 3
$b is 12
$c is
$a is 3
$b is 13
$c is
$a is 3
$b is 13
$c is 20
$a is 3
$b is 13
$c is 21
$a is 3
$b is 13
$c is 22
$a is 3
$b is 13
$c is 23
取决于你正在做什么可能无关紧要,但是这可能导致问题,这使得为每个foreach
设想一个不同的变量名称是值得的(例如$b
)。 / p>
答案 3 :(得分:0)
我同意其他人认为这应该可行,但使用不同的名称是更好的做法。
但是,如果你是偏执狂,你总是可以在循环之间手动清除或删除变量:
foreach ($a in $something)
{Write-host $a}
.
$a = $null;
.
foreach ($a in $somethingelse)
{Write-host $a}
或者:
foreach ($a in $something)
{Write-host $a}
.
Remove-Variable -Name a;
.
foreach ($a in $somethingelse)
{Write-host $a}