Подписаться на событие изменения элемента коллекции - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Есть какой-то список с элементами в нем. Мне надо, чтобы при изменении элемента вызывалось определенное событие. Именно на ИЗМЕНЕНИЕ элемента, А НЕ НА МЕТОДЫ List.Add(), List.Remove() и т.д.. Привожу код ниже, который бы доработать.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace ConsoleApplication2
  7. {
  8. //наш тип, в котором мы пропишем событие
  9. class EnhancedList<T> : List<T>
  10. {
  11. //вот это самое событие, которое должно произойти при изменении элемента
  12. //и как это осуществить???
  13. public event EventHandler OnItemChange;
  14. }
  15. class Program
  16. {
  17. static void Main(string[] args)
  18. {
  19. EnhancedList<int> MyList = new EnhancedList<int>();
  20. //подобовляем всяких чисел для примера
  21. MyList.Add(111);
  22. MyList.Add(222);
  23. MyList.Add(333);
  24. foreach (var item in MyList) Console.WriteLine(item);
  25. //и тут нам взбредило изменить существующий элемент
  26. MyList[1] = 123;
  27. //после этого должно произойти событие, реагирующее на изменение элемента
  28. Console.ReadLine();
  29. }
  30. //вот этот метод подпишем на событие
  31. private void MyList_ItemChanged(object sender, EventArgs e)
  32. {
  33. Console.WriteLine("Обнаружено изменение эл-та MyList!");
  34. }
  35. }
  36. }

Решение задачи: «Подписаться на событие изменения элемента коллекции»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace ConsoleApplication2
  8. {
  9.     //наш тип, в котором мы пропишем событие
  10.     class EnhancedList<T> : List<T>
  11.     {
  12.         //вот это самое событие, которое должно произойти при изменении элемента
  13.         public event EventHandler OnItemChange;
  14.  
  15.         public new T this[int index]
  16.         {
  17.             get
  18.             {
  19.                 return base[index];
  20.             }
  21.             set
  22.             {
  23.                 base[index] = value;
  24.                 if (OnItemChange != null) OnItemChange(this, null);
  25.             }
  26.         }
  27.     }
  28.  
  29.     class Program
  30.     {
  31.         static void Main(string[] args)
  32.         {
  33.             EnhancedList<int> MyList = new EnhancedList<int>();
  34.             MyList.OnItemChange += new EventHandler(MyList_ItemChanged);
  35.             //подобовляем всяких чисел для примера
  36.             MyList.Add(111);
  37.             MyList.Add(222);
  38.             MyList.Add(333);
  39.  
  40.             foreach (var item in MyList) Console.WriteLine(item);
  41.  
  42.             //и тут нам взбредило изменить существующий элемент
  43.             MyList[1] = 123;
  44.  
  45.             //после этого должно произойти событие, реагирующее на изменение элемента
  46.  
  47.             Console.ReadLine();
  48.         }
  49.  
  50.         //вот этот метод подпишем на событие
  51.         static void MyList_ItemChanged(object sender, EventArgs e)
  52.         {
  53.             Console.WriteLine("Обнаружено изменение эл-та MyList!");
  54.         }
  55.     }
  56. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы