Interessanter C# Bug?

  • Hallo,

    ich bin grad auf folgenden Bug? gestoßen

    gibt aus:

    Code
    10
    10
    10
    10
    10

    Nun ich kann mir denken das, das daran liegt das lambda expressions zur compile time erzeugt werden..

    Allerdings bin ich absolut unfähig die Spezifikation dazu zu finden.

    help?

  • Hmm, Bug... Ich würds eher die Ineleganz, die man bei Sprachen mit destruktivem Update nunmal hat, nennen. Die erzeugten Funktionen sind wohl alle unterschiedliche Objekte, haben aber alle eine Referenz aufs selbe Objekt i. Zu dem Zeitpunkt, zu dem sie aufgerufen werden, hat dieses eine Objekt nunmal den Wert 5.

    Ohne C# zu kennen oder mich irgendwie informiert zu haben: Was passiert, wenn du sowas in die Richtung probierst? Die Idee wär, über die zusätzliche Indirektion den Wert von i zu kopieren, nicht die Adresse. Und zwar zu dem Zeitpunkt, zu dem die Funktion in die Liste eingefügt wird, d.h. mit unterschiedlichen i-Werten.

    Code
    doublers.Add( ((int j) => (() => j * 2))(i) );

    *plantsch*

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!