Перехват исключения, создаваемого объектом перед кодом … c#

#c# #.net #exception-handling

#c# #.net #обработка исключений

Вопрос:

C # .Net 4.6.1

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

введите описание изображения здесь

Поэтому, когда моя программа переходит к этой строке кода, генерируется исключение:

 case CellType.Formula:
{
    cNew.CellFormula = "IFERROR(FF3 / EY3,"")";
    cNew.SetCellFormula(cOld.CellFormula); //this is where it blows up
    break;
}
 

При отладке кода я вижу, что было сгенерировано исключение. Это видно на изображении выше. Итак, я знаю, что что-то пошло не так в свойстве библиотеки, и то, что я хочу сделать, это зафиксировать эту ошибку ПЕРЕД тем, как перейти к строке кода, используя свойство, и продолжить работу с приложением.

Есть ли способ проверить объект на наличие исключений и указать моему коду пропустить его или сделать что-то еще? Например:

 if (cOld.CellFormula == Exception){
    // do something
}
 

Спасибо

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

1. вы пробовали try catch?

2. Вы не знаете, как обрабатывать исключения? Прекратите то, что вы делаете. Пойдите, возьмите несколько книг для начинающих по C #.

3. Итак, вы пытаетесь перехватить исключение до его создания? Ну, нет, это невозможно. Вы, конечно, можете структурировать свой код так, чтобы он в первую очередь не создавал исключение, но если вы не можете изменить код, ваш единственный вариант — не выполнять код, который генерирует исключение. Это или создание машины времени из Delorean.

4. Мы не знаем, как была создана эта библиотека, поэтому мы не можем ответить на этот вопрос. Если он выдает SerializationException при первом использовании любого свойства объекта после десериализации (но это только предположение), то должно быть какое-то свойство, указывающее на успех или неудачу. Если нет, все, что осталось, это перехват исключения.

5. Если решение настолько простое, почему вы, люди, не публикуете его? Если вы не знаете ответа, не комментируйте. Получить жизнь

Ответ №1:

На линии разрыва

 cNew.SetCellFormula(cOld.CellFormula);
 

Вы можете поместить вокруг него пробную защелку, вот так

 try
{
    cNew.SetCellFormula(cOld.CellFormula);
}
catch(Exception e)
{
    MessageBox.Show(e.Message);
}
 

при этом отобразится окно сообщения с текстом ошибки

Если вы запускаете это как консольное приложение, замените

 MessageBox.Show(e.Message);
 

С

 Console.WriteLine(e.Message);
 

Это выведет сообщение на экран (не забудьте удалить его в процессе производства!)

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

1. Я думал об этом, но я смотрел, есть ли другой способ. Код, который у меня есть, уже находится во внешнем блоке try / catch, но когда он попадает в него, он закрывает показ. Я пытаюсь избежать перехвата show stopper. Спасибо