Hier Aufzählen ist ein einfaches Szenario in C#:Unterschiede zwischen Powershell und C#, wenn Sie eine Sammlung
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);
}
Dies wirft ein InvalidOperationException
, weil ich die Sammlung bin modifizieren, während er aufzählt.
Betrachten wir nun ähnlich Powershell-Code:
$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
Dieses Skript entfernt tatsächlich die Nummer 9 aus der Liste! Keine Ausnahmen ausgelöst.
Nun, ich weiß, dass das C# -Beispiel ein List-Objekt verwendet, während das PowerShell-Beispiel ein Array verwendet, aber wie zählt PowerShell eine Auflistung auf, die während der Schleife geändert wird?
Markieren Sie dies als Antwort, weil es die Dinge vollständig erklärt. :-) –