【发布时间】:2010-11-23 17:29:11
【问题描述】:
这是一个简单的 C# 场景:
var intList = new List<int>();
intList.Add(4);
intList.Add(7);
intList.Add(2);
intList.Add(9);
intList.Add(6);
foreach (var num in intList)
{
if (num == 9)
{
intList.Remove(num);
Console.WriteLine("Removed item: " + num);
}
Console.WriteLine("Number is: " + num);
}
这会引发InvalidOperationException,因为我在枚举集合时正在修改它。
现在考虑类似的 PowerShell 代码:
$intList = 4, 7, 2, 9, 6
foreach ($num in $intList)
{
if ($num -eq 9)
{
$intList = @($intList | Where-Object {$_ -ne $num})
Write-Host "Removed item: " $num
}
Write-Host "Number is: " $num
}
Write-Host $intList
这个脚本实际上从列表中删除了数字 9!没有抛出异常。
现在,我知道 C# 示例使用 List 对象,而 PowerShell 示例使用数组,但是 PowerShell 如何枚举将在循环期间修改的集合?
【问题讨论】:
标签: c# powershell enumeration