Pourquoi est La Variable d'Itération dans une instruction foreach de C# en lecture seule?

Ce que je comprends, C#foreach variable d'itération est immuable.

Ce qui signifie que je ne peux pas modifier l'itérateur comme ceci:

foreach (Position Location in Map)
{
     //We want to fudge the position to hide the exact coordinates
     Location = Location + Random();     //Compiler Error

     Plot(Location);
}

Je ne peux pas modifier la variable d'itérateur directement et au lieu de cela, je dois utiliser une boucle for

for (int i = 0; i < Map.Count; i++)
{
     Position Location = Map[i];
     Location = Location + Random();

     Plot(Location);        
     i = Location;
}

À venir à partir d'un C++ fond, je vois foreach comme une alternative à la boucle for. Mais avec la restriction ci-dessus, j'ai l'habitude de secours à l'aide de la boucle for.

Je suis curieux, quel est l'intérêt de faire de l'itérateur immuable?


Edit:

Cette question est plus de la curiosité et non comme une question de codage. J'ai apprécié le codage des réponses, mais je ne peux pas les marquer comme réponses.

Aussi, l'exemple ci-dessus a été simplifiée. Voici un exemple C++ de ce que je veux faire:

//The game's rules: 
//  - The "Laser Of Death (tm)" moves around the game board from the
//    start area (index 0) until the end area (index BoardSize)
//  - If the Laser hits a teleporter, destroy that teleporter on the
//    board and move the Laser to the square where the teleporter 
//    points to
//  - If the Laser hits a player, deal 15 damage and stop the laser.

for (int i = 0; i < BoardSize; i++)
{
    if (GetItem(Board[i]) == Teleporter)
    {
        TeleportSquare = GetTeleportSquare(Board[i]);
        SetItem(Board[i], FreeSpace);
        i = TeleportSquare;
    }

    if (GetItem(Board[i]) == Player)
    {
        Player.Life -= 15;
        break;
    }
}

Je ne peux pas faire ci-dessus en C#foreach parce que l'itérateur i est immuable. Je pense (corrigez-moi si je me trompe), c'est spécifique à la conception de foreach dans les langues.

Je suis intéressé par pourquoi le foreach itérateur est immuable.

  • Bonne trouvaille. Je suis un peu surpris que je n'ai jamais remarqué ça avant.
  • Vous n'êtes pas en train de changer l'élément de tableau dans votre deuxième exemple soit.
  • Je ne suis pas vraiment intéressé à changer l'élément de tableau. Je suis plus intéressé par pourquoi l'itérateur est immuable. Je suppose que j'ai besoin de modifier la question de la clarifier.
  • Je corrige la position des mains, mon 2ème exemple manquait une ligne. Merci pour le heads up.
InformationsquelleAutor MrValdez | 2009-04-22