C # Pragma для подавления перерыва на брошенную ошибку - PullRequest
3 голосов
/ 25 марта 2010

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

Во-вторых, я использую 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 или какой-то другой недопустимый символ. Я мог бы использовать что-то похожее на this , но не все типы, которые я конвертирую, также имеют метод TryParse.

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

Ответы [ 4 ]

16 голосов
/ 06 марта 2011

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

[System.Diagnostics.DebuggerNonUserCode]

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

1 голос
/ 25 марта 2010

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

1 голос
/ 25 марта 2010

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

0 голосов
/ 25 марта 2010

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

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

...