/// <summary> /// Метод удаляющий элемент коллекции под указанным индексом /// </summary> /// <param name="index"></param> public void RemoveAt(int index) { //Переменной col типа List присваевается ссылка на массив collection преобразованный в коллекцию List List <T> col = collection.ToList(); try { //Далее осуществляется проверка наличия передаваемого индекса в коллекции int count = 0; for (int i = 0; i < collection.Length; i++) { if (i == index) { count++; } } //Если совпадение найдено if (count == 1) { //Проверяется задан ли обработчик на событие удаления элемента по заданному индексу if (OnRemovingAt != null) { //Экземпляр класса RemovrtAt содержит индекс удаляемого элемента из коллекции var eventArgs = new RemoverAt(index); //Вызов функции обработчика OnRemovingAt(this, eventArgs); //Если свойству Cancel присвоено значение 'false', то удаление отменяется if (eventArgs.Cancel) { return; } } //Удаление элемента под заданным индексом col.RemoveAt(index); ///переменной collection присваевается ссылка на коллекцию преобразованную к массиву после ///удаления из нее элемента collection = col.ToArray(); } else { //Если совпадение не найдено, выбрасывается исключение throw new ArgumentException("Передаваемый индекс не найден."); } } catch (ArgumentException ex) { //Экземпляр класса RemoverAtCancel содержит сообщение возникшего исключения и индекс удаляемого элемента var eventArgs = new RemoverAtCancel(index, ex.Message); //Вызов функции обработчика OnCancelRemoverAt(this, eventArgs); } }
/// <summary> /// Функция RemovingAtIndex вызывается при удалении элемента под определенным индексом /// </summary> /// <param name="sender">Объект, в контексте которого вызывается функция</param> /// <param name="rem"> события, который содержит индекс удаляемого из коллекции элемента</param> private static void RemovingAtIndex(object sender, RemoverAt rem) { ///Вывод запроса на подтверждение удаления Console.WriteLine($"Вы действительно хотите удалить элемент под индексом {rem.Index}? Y/N"); try { switch (Console.ReadKey(true).KeyChar) { ///Если нажата кнопка 'n' case 'n': ///Свойство Cancel принимает значение 'true' и удаление отменяется rem.Cancel = true; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Удаление отменено"); Console.ResetColor(); break; ///Если нажата клавиша 'Y', то происходит удаление case 'y': Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"Элемент под индексом '{rem.Index}' - удален"); Console.ResetColor(); break; ///Во всех остальных случаях выбрасывается исключение default: rem.Cancel = true; throw new ArgumentException("Нажата неверная клавиша."); } } catch (ArgumentException ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(ex.Message); Console.ResetColor(); } }