niedziela, 10 marca 2013

Problem z lazy w liscie

Jak pisałem wcześniej, klasa Lazy<T> nie zawsze zachowuje się tak jak byś myślał. Poniższy przykład przedstawia mylne działanie listy z 'późnymi' elementami.

Na początku stwórzmy klasę, która będzie zawierała pewną wartość.
      public class Item
        {
            private readonly int _i;
            public Item(int i)
            {
                _i = i;
            }
            public override string ToString()
            {
                return "I: "+_i;
            }
        }

A teraz stwórzmy listę z lazy elementami i te elementy ponumerujemy.
  List<Lazy<Item>> lazyList = new List<Lazy<Item>>();
  for (int i = 0; i < 10; i++)
  {
      lazyList.Add(new Lazy<Item>(() => new Item(i)));
  }
  foreach (var lazyItem in lazyList)
  {
     Console.WriteLine(lazyItem.Value);
  }

Jak uruchomimy aplikację to zamiast ponumerowanych elementów, dostajemy obiekty z tą samą wartością.


Brak komentarzy:

Prześlij komentarz