/// <summary> /// Метод Insert вставляет в коллекцию элемент под указанным индексом /// </summary> /// <param name="index">Индекс, под которым в коллекцию будет вставляться элемент</param> /// <param name="el">Вставляемый элемент</param> public void Insert(int index, T el) { //Переменной col типа List присваевается ссылка на массив collection преобразованный в коллекцию List List <T> col = collection.ToList(); //Если событию вставки присвоен обработчик if (OnInsert != null) { //Создается экземпляр класса Inserter, ссодержащий индекс и вставляемый элемент var eventArgs = new Inserter <T>(index, el); //Вызов функции обработчика OnInsert(this, eventArgs); //Если свойству объекта Cancel присвоено значение 'true' if (eventArgs.Cancel) { string message = $"Элемент {el} не был вставлен на позицию {index}"; //Создается экземпляр класса InsertCancel, ссодержащий сообщение с индексом и вставляемым в коллекцию элементом var evArgs = new InserterCancel(message); //Вызов функции обработчика события отмены вставки элемента на определенный индекс OnInsertCancel(this, evArgs); return; } } //Если функция обработчик не была задана, то происходит вставка элемента в коллекцию col.Insert(index, el); ///Переменной collection присваивается ссылка на коллекцию col преобразованную в массив collection = col.ToArray(); }
/// <summary> /// Метод InsertCancel вызывается при возникновении события - отмены вставки элемента на орпеделенную позицию /// </summary> /// <param name="sender">Объект, в контексте которого вызывается функция</param> /// <param name="inserter">Объект хранящий сообщение о вставляемом элементе и его индексе</param> private static void InsertCancel(object sender, InserterCancel inserter) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(inserter.Message); Console.ResetColor(); }