Класс Program улавливает исключения, которые я уже поймал

#c# #try-catch

#c# #попробуйте-поймайте

Вопрос:

Я получаю сообщение об ошибке

InvalidArgument = Значение ‘4’ недопустимо для ‘index’.

на

 Application.Run(new Form1());
  

Intelletrace подводит меня к этому коду:

         for (int i = 0; i < 20; i  )
        {
            try
            {
                if (dataBase.tagInclude.Count() == 0)
                {
                    commonTags.Add(dataBase.set.Tables["tagTable"].Select("tag like '*'", "count desc")[i]["tag"].ToString());
                }
                else
                {
                    commonTags.Add(dataBase.tagPruneList[i].tag);
                }
            }
            catch (IndexOutOfRangeException)
            {
                break;
            }
            catch (ArgumentOutOfRangeException)
            {
                break;
            }
        }
  

С ошибкой, находящейся на catch (ArgumentOutOfRangeException)

Я не понимаю, почему он это делает, если я не создаю исключение. Кроме того, он только начал это делать, но этот код работал некоторое время, и я не менял его в последнее время. Когда я кодирую его так, чтобы он не выдавал ошибку, он просто делает то же самое с другой строкой кода, которая работала еще дольше.

Добавленный мной код кажется довольно безобидным и не связанным:

     public static void itemChecked(ListViewItem lvi)
    {
        if (supressChecks) return;
        if (!lvi.Checked)
        {
            dataBase.Tag(lvi.Tag.ToString());
        }
        else
        {

        }
    }
  

Единственное, что этот код делает по-другому, это вызывает функцию dataBase.Tag() с тегом listviewitem, а не textbox.text .

Комментарии:

1. «Кроме того, он только начал это делать, но этот код работал некоторое время, и я не менял его в последнее время. » — Вы добавили или изменили код в приложение; это добавление / изменение может вызвать нежелательный побочный эффект. Поместите точку останова в метод, который вы изменили, и выполните пошаговый код, чтобы посмотреть, сможете ли вы выяснить, что происходит.

2. Это именно то, что я делаю, но даже после сотен пошаговых инструкций я не могу сказать, в чем проблема, ничего необычного не происходит.

Ответ №1:

Вы улавливаете:

 IndexOutOfRangeException
ArgumentOutOfRangeException
  

Но то, что выбрасывается, это:

  InvalidArgument
  

… согласно информации в вашем сообщении. Похоже, что функция ожидает число, и вы передаете символ или строку. Поймайте выброшенное исключение.

Комментарии:

1. Отладчик сообщает, что приложение выдает InvalidArgument . Запуск и ArgumentOutOfRangeException генерируется этим блоком кода. Если я добавлю catch для InvalidArgument, я просто получу сообщение об ошибке, компилятор не знает, что это такое. Добавление catch для System. Исключение ArgumentException ничего не меняет.

2. Вы должны отредактировать свой пост, чтобы включить точный текст исключения и точную строку, в которой генерируется исключение.