Допустима ли пустая попытка и перехват IndexOutOfBoundsException в конце цикла while операторов if в C#?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Допустима ли пустая попытка и перехват IndexOutOfBoundsException в конце цикла while операторов if в C#?

Сообщение Anonymous »


Я заканчиваю незавершенный проект C# WinForms, который представляет собой редактор сохранений для неуказанной игры. Я заметил, что идентификаторы портретов персонажей и значков имеют допустимый диапазон от 1 до 905, но не было кода для проверки того, что идентификатор персонажа находится в этом диапазоне, поэтому я решил это исправить. У меня есть решение этой проблемы, код которого (с частично отредактированными именами многих функций) приведен в конце этого поста, и я хотел знать, будет ли оно работать. Visual Studio говорит, что ошибок форматирования нет, но я знаю, что одного этого будет недостаточно. Я не могу скомпилировать для тестирования, потому что я еще не на той стадии, когда код можно компилировать, и у меня много недостающих данных WinForms. Если конкретное исключение, которое я разместил, не подходит, какое исключение подойдет лучше всего? Если цикл while не следует использовать таким образом, какой метод мне следует использовать, чтобы не переписывать весь блок кода с нуля? Вот соответствующий код, который у меня есть:

void getImage(int slot) { короткий идентификатор = 0; если (слот == 1) { пытаться { ID = ConvertStringtoID(comboBoxSlot1ID.Text); } улов (System.FormatException) { идентификатор = 0; } в то время как (ID > 0 && ID < 906) { если (ID < 10) { PictureBoxSlot1Portrait.Image = (Image)Properties.Resources.ResourceManager.GetObject("00" + ID); PictureBoxSlot1Icon.Image = (Image)Properties.Resources.ResourceManager.GetObject("icon00" + ID); } иначе, если (ID > 9 && ID < 100) { PictureBoxSlot1Portrait.Image = (Image)Properties.Resources.ResourceManager.GetObject("0" + ID); PictureBoxSlot1Icon.Image = (Image)Properties.Resources.ResourceManager.GetObject("icon0" + ID); } иначе, если (ID > 99 && ID < 906) { PictureBoxSlot1Portrait.Image = (Image)Properties.Resources.ResourceManager.GetObject("" + ID); PictureBoxSlot1Icon.Image = (Image)Properties.Resources.ResourceManager.GetObject("значок" + ID); } еще { пытаться { } улов (System.IndexOutOfRangeException) { идентификатор = 0; } } } } } Мне еще не удалось ничего попробовать или протестировать; это просто вопрос относительно допустимого использования кода C#. Я также видел только один вопрос, который был похож, но не совпадал с моим вопросом в разделе «возможно связанные вопросы», прежде чем публиковать это, хотя это частично указывало на то, что то, что я делаю, может быть правильным. Я ожидаю, что код выдаст IndexOutOfBoundsException, если ID больше 905, и прочитает правильный файл изображения, если нет.

Изменить: Хорошо, я значительно переработал код, используя отзывы, опубликованные здесь. В итоге я получил следующий код, который не показывает ошибок в Visual Studio, и, несмотря на то, что другие говорят, что «неправильно использовать исключения для управления потоком», он работает для моего варианта использования. Кроме того, технически я не использую их для управления чем-либо, просто я хочу, чтобы окно исключения появлялось для всех, у кого есть файл сохранения с идентификатором персонажа больше 905, чтобы они знали, что их файл сохранения, вероятно, поврежден. Я хочу, чтобы программа могла продолжить работу и после этого, и чтобы эта ошибка не стала фатальной. Вот исправленный код:
void getImage(int slot) { короткий идентификатор = 0; если (слот == 1) { пытаться { ID = ConvertStringtoID(comboBoxSlot1ID.Text); } улов (System.FormatException) { идентификатор = 0; } если (ID < 10) { PictureBoxSlot1Portrait.Image = (Image)Properties.Resources.ResourceManager.GetObject("00" + ID); PictureBoxSlot1Icon.Image = (Image)Properties.Resources.ResourceManager.GetObject("icon00" + ID); } иначе, если (ID > 9 && ID < 100) { PictureBoxSlot1Portrait.Image = (Image)Properties.Resources.ResourceManager.GetObject("0" + ID); PictureBoxSlot1Icon.Image = (Image)Properties.Resources.ResourceManager.GetObject("icon0" + ID); } иначе, если (ID > 99 && ID < 906) { PictureBoxSlot1Portrait.Image = (Image)Properties.Resources.ResourceManager.GetObject("" + ID); PictureBoxSlot1Icon.Image = (Image)Properties.Resources.ResourceManager.GetObject("значок" + ID); } иначе, если (ID > 905) { throw(System.InvalidOperationException); идентификатор = 0; продолжать; } } }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Допустима ли пустая попытка и перехват IndexOutOfBoundsException в конце цикла while операторов if в C#?
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Перехват (java.lang.IndexOutOfBoundsException)
    Anonymous » » в форуме JAVA
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Пустая/пустая (привязка) страница категории Magento
    Anonymous » » в форуме Php
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Допустима ли Noop JVM в рамках модели памяти Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Почему перегрузка операторов == и <=> необходима для перегрузки всех операторов сравнения? [дубликат]
    Anonymous » » в форуме C++
    0 Ответы
    77 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»