在foreach循环中重用变量

时间:2017-05-03 15:54:42

标签: powershell

意识到它可能不是最佳实践,是否有任何其他理由不在foreach中重用当前项变量:

foreach ($a in $something)
{Write-host $a}
.
.
.
foreach ($a in $somethingelse)
{Write-host $a}

换句话说,在第二种情况下总是最好使用不同的变量($ b?)

4 个答案:

答案 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}
相关问题