C# - dodawanie elementów do listy

0

Witam Wszystkich!
Dodając elementy do listy napotkałem pewien problem.. Nie mam już pomysłu co może być tego przyczyną.
Otóż dodając, kolejny, nowy element do listy dodaje on się, ale wszystkie elementy, które były już na liście są podmieniane na ostatnio dodany element. Z tego wynika, że każdy element na liście jest taki sam. ;/
Z góry dziękuję za zainteresowanie tematem.
Pozdrawiam,
Michał.

0

Tu jest tworzony okiekt:

 
AwiCADMain.tempWing = new classes.Wing_CAD {
                    SelectedWing = this.WingsList.SelectedItems[0] as DB_profiles,
                    WingIn = new Rectangle(),
                    WingOut = new Rectangle(),
                    TopLeft = new Line(),
                    TopRight = new Line(),
                    BottomLeft = new Line(),
                    BottomRight = new Line(),
                    //
                    Glass = new classes.Glass_CAD(),
                    Fittings = new classes.Fitting_CAD(),
                    Sashes = new List<classes.Sash_CAD>(),
                };
//a tu jest dodawany do listy elementów. Przed dodaniem do listy uzupełniane są pola od WingIn do BottomRight.

this.ProjectCAD.FrameCAD.WingsList.Add(this.tempWing);
0

Bo pewnie w List<T> masz X razy tą samą referencje dodaną, a nie X różnych wskazujących na X różnych obiektów.
Prosty przykład obrazujący:

public class Foo
{
   public int Number { get; set; }
}
class Program
{
   private static void Main(string[] args)
   {
      Foo foo = new Foo();
      var list = new List<Foo>();
      for (int i = 0; i < 10; i++)
      {
         if (list.Contains(foo))
         {
            Console.WriteLine("Yes"); // 9 razy "YES"
         }
         list.Add(foo);
      }
      foo.Number = 10;
      Console.WriteLine(list.All(x => x.Number == 10)); // TRUE
      foo.Number = 9;
      Console.WriteLine(list.All(x => x.Number == 9)); // TRUE
   }
}
0

Nie sądzę, aby to było przyczyną.
Obiekty dodawane do listy tworzone są w momencie wybrania ich z listy. Czyli krótko mówiąc w tym przypadku wyświetla się forma z listą skrzydeł okiennych. Przy podwójnym kliknięciu, przy wybraniu skrzydła tworzona jest nowa instancja obiektu

 this.tempWing

co widać w kodzie wyżej. Po drodze jest jeszcze metoda, która rysuje skrzydło na Canvas i uzupełnia pola obiektu. Na końcu uzupełniony obiekt jest przypisany do listy elementów.
Przeszedłem przez kluczowe fragmenty kodu Debuggerem i wychodzi na to, że przed dopisaniem elementu do listy, każdy z elementów ma różne dane przechowywane w polach. Jak rzuciłem foreach na końcu wykonywania kodu na liście wszystkie elementy mają takie same dane jak ostatni dodany. ;/

1 użytkowników online, w tym zalogowanych: 0, gości: 1