C#Pragma来抑制抛出错误的中断

时间:2010-03-25 06:53:29

标签: c# exception-handling pragma

首先,我运行我的应用程序,并在任何错误(处理或未处理)上抛出异常。

其次我使用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;
    }
}

我发现每次输入- -1或其他一些无效字符时,VS断开执行会令人分心。我可以使用与this类似的内容,但不是我转换为的所有类型都使用TryParse方法。

我希望可能有某种方法可以在try内禁用中断代码段而不更改我的异常设置。

4 个答案:

答案 0 :(得分:16)

将try / catch放在自己的方法中,并在方法上设置此属性:

[System.Diagnostics.DebuggerNonUserCode]

调试器不会在该方法内停止(即使对于断点)。当方法完成时,异常已被处理,因此它也不会在那时中断。

答案 1 :(得分:1)

在Debug - >下例外菜单可以为任何特定的异常类型提供中断。

答案 2 :(得分:1)

我不确定是否完全按照您的问题进行操作,但如果要在特定异常上禁用VS break,可以使用“例外”对话框(ctrl-alt-e)对其进行自定义。打开“公共语言运行时异常”树,深入查看特定异常并将其关闭。 FormatException位于System下。这样,除了FormatException之外,VS将破坏所有托管异常。

答案 3 :(得分:0)

不是直接答案,但您可以在尝试使用TypeConverter之前创建一个对字符串值进行完整性检查的方法,然后对其应用条件(“DEBUG”)属性 - 因此生产代码继续使用TypeConverter(并捕获所有失败的情况),同时在调试时,在击中TypeConverter之前拾取并避免常见错误。

通过应用条件,您可以避免在代码的发布版本中使用此代码 - 它只是用于捕获当前正在进行的常见错误。