Foreach Iterationsvariable ??



  • Hallo bin auf meiner Suche nach der XMl ;Lösung im anderen Thread auf folgendes aus der msdn gestoßen :

    foreach(XmlNode node1 in node.ChildNodes)
       foreach (XmlNode node2 in node1.ChildNodes)
          if (node2.Name == "price")
             {
                Decimal price = Decimal.Parse(node2.InnerText);
                // Increase all the book prices by 20%
                String newprice = ((Decimal)price*(new Decimal(1.20))).ToString("#.00");
                Console.WriteLine("Old Price = " + node2.InnerText + "\tNew price = " + newprice);
                node2.InnerText = newprice;   //!?!?!?!
              }
    

    Ich dachte der foreach Iterator ist nur zum Anzeigen, nicht zum Ändern da ?

    Sowas geht ja, z:B. auch nicht :

    int[] arr = new int[12];
    
    		foreach (var v in arr){
    
    			v+=2;
    			}
    


  • Hat vielleicht was damit zu tun, daß da die Iterationsvariable nur eine Referenz aufs echte Objekt ist und nicht das Objekz seberö



  • Wo und unter was kann ich das nachlesenb ?





  • Ok, aber bzgl. der foreach schlefe, das sie referenzen ändern kann steht da nix drin oder hab ich das übersehen



  • Tut sie ja auch nicht.



  • Die foreach Schleife kann auch keine Referenzen ändern.

    foreach (var blah in blubb)
    {
       if (blah.Var > 100)
          blah = new Blah(); // <---- Geht nicht, sollte IIRC nen Kompilierfehler geben
       else
          blah.Var++; // Geht, da die Referenz *nicht* geändert wird sondern nur das referenzierte Objekt
    }
    


  • Geht, da die Referenz *nicht* geändert wird sondern nur das referenzierte Objekt

    The Jumping Point 🙂 Kapiert 👍


Log in to reply