4

当我的 C# 应用程序中的断言失败时,我希望抛出一个异常并且编辑器跳转到该位置。但是会弹出一个中止/重试/忽略消息框。有没有办法控制这种行为?

4

2 回答 2

3

您可以添加一个自定义 TraceListener ,它会在任一方法上引发异常.Fail()

public class ThrowListener : TextWriterTraceListener
{
    public override void Fail(string message)
    {
        throw new Exception(message);
    }

    public override void Fail(string message, string detailMessage)
    {
        throw new Exception(message);
    }
}

我可能会派生出你自己的异常类型,它同时接受消息和 detailMessage,因此异常来自哪里更明显。

您必须将调用堆栈提升到 .Assert() 调用,因为调试器可能会直接将您带到 .Assert() 调用throw

您可以像这样添加它:

Debug.Listeners.Insert(0, new ThrowListener());
于 2013-01-24T02:46:06.203 回答
2

不直接:这就是 Debug.Assert 所做的。请参阅文档

http://msdn.microsoft.com/en-us/library/system.diagnostics.debug.aspx

也许您想使用除 Debug.Assert 之外的其他东西?比如如果无法处理就简单地抛出一个异常,或者在需要时调用一些应用程序定义的 onError 处理程序?

或者,您可以通过添加侦听器并连接到该侦听器来获得所需的内容。请参阅文档。

于 2013-01-24T02:42:42.577 回答