예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        /// <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();
            }
        }