C # - Винятки щодо їжі - Переповнення стека

Я час від часу аналізую файл, який містить дані MalFormed.

стека

і це кидає виняток,

я хотів би відновити виняток і проігнорувати погано відформатовані дані.

Який найкращий спосіб це зробити?

* EDIT: * Я думаю, моє запитання не було добре зрозуміле. я хотів би відновити виняток, будь-який виняток, я не хочу, щоб моя програма зупинялася. але продовжувати.

8 відповідей 8

Я думаю, що ви запитуєте ось що:

При синтаксичному аналізі файлу рядок за рядком, іноді поточний рядок має неправильні дані, що призводить до винятку у ваш код. Можливо, вам просто потрібно структурувати свій код таким чином, щоб try/catch оточував лише код синтаксичного аналізу, а не код зчитування рядків. Наприклад:

Зовнішній блок try/catch - правильно обробляти закриття об’єкта зчитування, якщо щось сталося під час спроби відкрити або прочитати файл. Внутрішній блок try/catch полягає в тому, щоб проковтнути винятки, які виникли, якщо дані зчитування були неправильно сформовані і не вдалося правильно проаналізувати.

Однак я погоджуюсь майже з усіма іншими. Просто проковтнути виняток може бути не добре. Принаймні, я рекомендую вам десь записати його.

Коротше кажучи, ви, мабуть, не повинні використовувати для цього винятки. Щось на зразок TryParse, який повертає false, є набагато ефективнішим і легшим для відновлення. Обробка винятків - це трохи підхід до тупих об’єктів.

Загалом, приблизно так:

Вам слід уникати перехоплення загального випадку винятків і замість цього вловлювати конкретний виняток, яким би він не був.