是否可以将 Debug.Assert 设置为仅抛出异常而不是在 C# 中弹出窗口

本文关键字:窗口 抛出异常 Debug Assert 设置 是否 | 更新日期: 2023-09-27 17:55:27

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

是否可以将 Debug.Assert 设置为仅抛出异常而不是在 C# 中弹出窗口

您可以添加一个自定义 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);
    }
}

我可能会派生您自己的异常类型,它同时接受消息和详细信息消息,因此异常的来源更加明显。

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

您可以像这样添加它:

Debug.Listeners.Insert(0, new ThrowListener());

不直接:这就是 Debug.Assert 所做的。查看文档

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

也许你想使用Debug.Assert以外的其他东西? 例如,如果无法处理异常,则简单地抛出异常,或者在需要时调用某些应用程序定义的onError处理程序?

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