C# Pragma для подавления прерывания при возникновении ошибки

StackOverflow https://stackoverflow.com/questions/2513577

  •  22-09-2019
  •  | 
  •  

Вопрос

Во-первых, я запускаю свои приложения с исключениями, возникающими при любой ошибке (обработанной или нет).

Во-вторых, я использую TypeConverter для преобразования строки пользовательского ввода в реальный объект.

Третий TypeConverter не предлагает нет TryConvert метод, поэтому я застрял в использовании исключений для проверки, используя здесь этот довольно уродливый фрагмент кода:

try
{
    this._newValue = null;
#pragma Magic_SuppressBreakErrorThrown  System.Exception
    this._newValue = this.Converter.ConvertFromString(this._textBox.Text);
#pragma Magic_ResumeBreakErrorThrown  System.Exception
    this.HideInvalidNotification();
}
catch (Exception exception)
{
    if (exception.InnerException is FormatException)
    {
        this.ShowInvalidNotification(this._textBox.Text);
    }
    else
    {
        throw;
    }
}

Меня довольно отвлекает то, что VS прерывает выполнение каждый раз, когда я набираю команду. - из -1, или какой-либо другой недопустимый символ.Я мог бы использовать что-то похожее на этот но не все типы, которые я конвертирую, имеют TryParse метод либо.

Я надеюсь, что есть какой-то способ отключить прерывание раздела кода внутри try без изменения настроек исключений.

Это было полезно?

Решение

Я не уверен, что полностью понимаю ваш вопрос, но если вы хотите отключить прерывание VS для определенных исключений, вы можете настроить это с помощью диалогового окна «Исключения» (ctrl-alt-e).Откройте дерево исключений среды общего языка, перейдите к конкретному исключению и отключите его.FormatException находится в разделе System.Таким образом, VS будет прерываться на всех управляемых исключениях, кроме FormatException.

Другие советы

Поместите try/catch в собственный метод и установите этот атрибут для метода:

[System.Diagnostics.DebuggerNonUserCode]

Отладчик не остановится внутри этого метода (даже для точек останова).А когда метод завершается, исключение уже обработано, поэтому на этом этапе оно также не прерывается.

В меню «Отладка» -> «Исключения» вы можете отключить прерывание для любого конкретного типа исключения.

Это не прямой ответ, но вы могли бы создать метод, который проверяет правильность строковых значений, прежде чем пытаться использовать TypeConverter, а затем применить к нему атрибут Conditional("DEBUG") - чтобы рабочий код продолжался и использует TypeConverter (и перехватывает все случаи сбоя), в то время как во время отладки ваши распространенные ошибки выявляются и избегаются до обращения к TypeConverter.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top