C# pair und List



  • public class Pair<T, U> 
            {
                public Pair() 
                {
                }
    
                public Pair(T first, U second) 
                {
                    this.First = first;
                    this.Second = second;
                }
    
                public T First { get; set; }
                public U Second { get; set; }
            };
    
            Pair<int, int> pair = new Pair<int, int>();
            List<Pair<int, int>> soundlist = new List<Pair<int, int>>();
    

    wenn ich jetzt

    pair.First = 12;
    pair.Last = 2;
    soundlist.add(pair)

    mehreremale ausführe sind immer alle elemente in der soundlist gleich auch wenn ich pair.first und pair.last immer wieder ändere. alle elemente sind in der soundlist gleich wie das zu letzt hinzugefügte elemen.

    kann mir jemand helfe?

    thx



  • Du fügst ja auch immer das selbe Element in die Liste ein. Natürlich sind dann alle Elemente gleich!



  • auch wenn ich pair.first und pair.last immer wieder ändere

    pair.First = (int)num_Frequency.Value;
                pair.Second = (int)num_Duration.Value;
                list_Beep.Items.Add("Frequency: " + pair.First + " ; Duration: " + pair.Second);
                soundlist.Add(pair);
    


  • minder (der anfänger) schrieb:

    auch wenn ich pair.first und pair.last immer wieder ändere

    pair.First = (int)num_Frequency.Value;
                pair.Second = (int)num_Duration.Value;
                list_Beep.Items.Add("Frequency: " + pair.First + " ; Duration: " + pair.Second);
                soundlist.Add(pair);
    

    Du änderst aber nur die Properties des Objekts. In der Liste liegen nur Referenzen zu diesem einen Objekt, daher wirkt sich die geänderte Property auch auf den Listeninhalt aus... Schau dir mal den Unterschied von Referenz- und Valuetypen an, dann wirds dir vielleicht klar. C# ist halt nicht C++.



  • ok, und wie müsste ich das machen?



  • Zum Beispiel so:

    List<Pair<int, int>> soundList = new List<Pair<int, int>>();
    soundList.Add(new Pair<int, int>(12, 2));
    soundList.Add(new Pair<int, int>(13, 1));
    soundList.Add(new Pair<int, int>(42, 33));
    


  • thx



  • Die Frage ist ob warum du hier unbedingt eine eigene Klasse "Pair" machst, vielleicht kannst du auch die KeyValuePair<T,R> von .NET nutzen. aber das ist nur ein tip, ich weiß ja nicht was du vor hast.


Anmelden zum Antworten