/// <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> /// Метод CancelRemoverAt вызывается при отмене удаления элемента на определенной позиции /// </summary> /// <param name="sender">Объект, в контексте которого вызывается функция</param> /// <param name="rem">Объект хранящий индекс элемента и сообщение об удалении элемента</param> private static void CancelRemoverAt(object sender, RemoverAtCancel rem) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"{rem.Message} Индекс - {rem.Index}"); Console.ResetColor(); }