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

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

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

Здравствуйте. Есть какой-то список с элементами в нем. Мне надо, чтобы при изменении элемента вызывалось определенное событие. Именно на ИЗМЕНЕНИЕ элемента, А НЕ НА МЕТОДЫ List.Add(), List.Remove() и т.д.. Привожу код ниже, который бы доработать.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication2
{
    //наш тип, в котором мы пропишем событие
    class EnhancedList<T> : List<T>
    {
        //вот это самое событие, которое должно произойти при изменении элемента
        //и как это осуществить???
        public event EventHandler OnItemChange;
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            EnhancedList<int> MyList = new EnhancedList<int>();
 
            //подобовляем всяких чисел для примера
            MyList.Add(111);
            MyList.Add(222);
            MyList.Add(333);
 
            foreach (var item in MyList) Console.WriteLine(item);
 
            //и тут нам взбредило изменить существующий элемент
            MyList[1] = 123;
 
            //после этого должно произойти событие, реагирующее на изменение элемента
 
            Console.ReadLine();
        }
 
        //вот этот метод подпишем на событие
        private void MyList_ItemChanged(object sender, EventArgs e)
        {
            Console.WriteLine("Обнаружено изменение эл-та MyList!");
        }
    }
}

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

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication2
{
    //наш тип, в котором мы пропишем событие
    class EnhancedList<T> : List<T>
    {
        //вот это самое событие, которое должно произойти при изменении элемента
        public event EventHandler OnItemChange;
 
        public new T this[int index]
        {
            get
            {
                return base[index];
            }
            set
            {
                base[index] = value;
                if (OnItemChange != null) OnItemChange(this, null);
            }
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            EnhancedList<int> MyList = new EnhancedList<int>();
            MyList.OnItemChange += new EventHandler(MyList_ItemChanged);
            //подобовляем всяких чисел для примера
            MyList.Add(111);
            MyList.Add(222);
            MyList.Add(333);
 
            foreach (var item in MyList) Console.WriteLine(item);
 
            //и тут нам взбредило изменить существующий элемент
            MyList[1] = 123;
 
            //после этого должно произойти событие, реагирующее на изменение элемента
 
            Console.ReadLine();
        }
 
        //вот этот метод подпишем на событие
        static void MyList_ItemChanged(object sender, EventArgs e)
        {
            Console.WriteLine("Обнаружено изменение эл-та MyList!");
        }
    }
}

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


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

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

12   голосов , оценка 4.083 из 5
Похожие ответы