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

Cou*_*y D 3 c# exception-handling pragma

首先,我运行我的应用程序,异常抛出任何错误(处理与否).

其次我使用a 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现它有相当分散注意力VS破执行的每次我输入--1,或者一些其他的无效字符.我可以使用与此类似的东西,但不是我转换为所有类型的TryParse方法.

我希望有一些方法可以在try不改变我的异常设置的情况下禁用中断代码段.

Fan*_*ius 16

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

[System.Diagnostics.DebuggerNonUserCode]
Run Code Online (Sandbox Code Playgroud)

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


Bri*_*sen -1

我不确定我是否完全理解您的问题,但如果您想在特定异常上禁用 VS 中断,您可以使用“异常”对话框 (ctrl-alt-e) 进行自定义。打开公共语言运行时异常树并深入到特定异常并将其关闭。FormatException 位于 System. 这样 VS 将在除 FormatException 之外的所有托管异常上中断。

  • 这确实是我正在寻找的效果,不幸的是它抛出了 System.Exception 而不是 FormatException。我希望仍然能够打破所有,除非它发生在明确定义的代码区域内(请参阅编辑)。 (2认同)
  • 但这会关闭此类异常的所有抛出。如果您的程序可能在大约 100 个位置抛出 FormatException,并且您为第一个位置添加了一个 try/catch,但在它获得之前,这是在 1000 个项目的循环中怎么办?扔到别的地方。我猜OP想说“我想在抛出的FormatException上中断,除非这个......代码块抛出它” (2认同)