如何在C#中抛出无声异常?

3

我有一个与ComboBox绑定的属性

    <ComboBox ItemsSource="{Binding AvailableTypes}"
            SelectedValue="{Binding Kind, Mode=TwoWay}}"/>

在属性的设置器中,我会在某些业务情况下抛出异常以中止属性的设置。

    public MyKind Kind
    {
        get { return kind; }
        set 
        {
            if (kind != value)
            {
                if (SomeRuleFailed(value))
                throw new Exception("to be ate by binding code");
                kind = value;
            }
        }
    }

除了每次引发异常时VS2010弹出之外,它的运行非常顺畅。是否有任何一种异常需要引发或属性需要设置,以使调试器保持在后台?

3
WPF内置了处理对象属性验证的接口,我建议您查看一下。 - Jimmy
我也使用IDataErrorInfo和IDataNotifyErrorInfo处理普通表格。但这种情况涉及一些弹出窗口,迫使我遵循异常处理方式。 - Ben
3个回答

5

您可以通过进入调试 > 异常来设置导致调试器中断的异常类型。取消选中Common Language Runtime Exceptions下的Thrown复选框,或者单独选择您要设置的异常类型。


5
你不应该抛出一个 Exception 类的实例,而是应该抛出从 Exception 类派生出来的类的实例。
如果你有一些框架没有覆盖到的内容,你可以创建自己的异常类(习惯上应该这么做),然后你可以选择你想让 Visual Studio 在哪些异常上中断调试。
创建完你的异常类后,进入“调试”-->“异常...”,然后选择你想要让调试器中断的异常。

1
我不喜欢创建异常类来与工作室通信,而是重用了System.ComponentModel.DataAnnotations.ValidationException。 - Ben
你为什么只是“与[Visual] Studio通信”?你肯定从抛出异常中获得了其他好处吧?如果是这样,你应该使用现有类型(不包括Exception本身,因为它太泛泛了)或为你的应用场景创建一个特定类型。 - Colin Mackay
唯一的好处就是中止绑定,不再使用此异常。Delphi语言有AbortException,可以被调试器忽略,我正在寻找类似于C#的东西,而不需要设置所有团队计算机来忽略特定的异常。不幸的是,在.NET中没有奇迹般的解决方案。 - Ben

3
在Visual Studio中按下Ctrl-Alt-E打开调试器的异常配置,然后选择或取消所需内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接