我有以下代码:
$project.PropertyGroup | Foreach-Object {
if($_.GetAttribute('Condition').Trim() -eq $propertyGroupConditionName.Trim()) {
$a = $project.RemoveChild($_);
Write-Host $_.GetAttribute('Condition')"has been removed.";
}
};
问题#1:如何从ForEach-Object中退出?我尝试使用“break”和“continue”,但它不起作用。
问题#2:我发现我可以在foreach循环中更改列表... 我们不能像C#那样做... 为什么PowerShell允许我们这样做呢?
$a = 1..23;
,以显示在执行循环期间不会反映出更改。 - ruffinForEach
结构内可见。如果您在ForEach
结构内添加$a[1] = 9
,它将显示为第二个元素为9,但您无法添加/删除数组元素,并且使用+=
运算符添加的任何内容直到结束时才会显示。如果不是固定大小的数组(即$a=[System.Collections.ArrayList]@(1,2,3)
),则任何尝试修改其内容的操作都会导致“集合已修改;枚举操作可能无法执行。”错误,终止循环。 - AdrianForeach-Object
。在PowerShell中(非常恼人的陷阱),foreach
是一个"运算符"和"别名"。此答案中提供的foreach
是"运算符",而不是"别名"。请参见这里。注意:此答案是代码的完全重构,可能不适用于许多情况。 - Jamie Marshall