这是代码:
$hash.GetEnumerator() | %{
if($_.value.x -eq $null)
{
$hash.remove($_.name);
}
}
如您所见,它在迭代哈希表时会修改哈希表。这样好吗?谢谢。
这是代码:
$hash.GetEnumerator() | %{
if($_.value.x -eq $null)
{
$hash.remove($_.name);
}
}
如您所见,它在迭代哈希表时会修改哈希表。这样好吗?谢谢。
我在 PowerShell 2.0 上试试这个:
$hash = @{"A1"="rouge";"A2"="vert";"A3"="bleu"}
$hash.GetEnumerator() | % { if($_.value -eq "bleu") {$hash.remove($_.name)}}
它给 :
Une erreur s'est produite lors de l'énumération parmi une collection : La collection a été modifiée ; l'opération d'énumérat
ion peut ne pas s'exécuter..
Au niveau de ligne : 1 Caractère : 1
+ <<<< $hash.GetEnumerator() | % { if($_.value -eq "bleu") {$hash.remove($_.name)}}
+ CategoryInfo : InvalidOperation: (System.Collecti...tableEnumerator:HashtableEnumerator) [], RuntimeExceptio
n
+ FullyQualifiedErrorId : BadEnumeration
原因是在枚举集合时尝试修改集合会引发异常。您可以尝试使用“for”语句。
如果你想使用foreach
语句,你可以尝试:
$hash = @{"A1"="rouge";"A2"="vert";"A3"="bleu"}
[string[]]$t = $hash.Keys
$t | % { if($hash[$_] -eq "vert") {$hash.remove($_)}}
$hash
Name Value
---- -----
A3 bleu
A1 rouge
PS C:\> $h = @{ "a"=1; "b"=2; "c"=3; "d"=4 }
PS C:\> $h.GetEnumerator() | % {
>> if ($_.Value -eq 2) { $h.Remove($_.Name) }
>> "{0}: {1}" -f $_.Name, $_.Value
>> }
>>
a: 1
b: 2
An error occurred while enumerating through a collection: Collection was
modified; enumeration operation may not execute..
At line:1 char:1
+ <<<< $h.getenumerator() | % {
+ CategoryInfo : InvalidOperation:
(System.Collecti...tableEnumerator:HashtableEnumerator) [],
RuntimeException
+ FullyQualifiedErrorId : BadEnumeration
在发布问题之前运行一个简单的测试真的那么难吗?