C#:为自定义异常重写 ToString() 方法

标签 c# .net exception tostring

我有一个包含一些附加字段的自定义异常类。我希望这些在 ToString() 方法中写出,但是如果我实现我自己的 ToString(),我会失去一些其他有用的东西(比如写异常类型名称、内部异常数据和堆栈跟踪)。

为此类异常实现您自己的 ToString() 方法的最佳方式/模式是什么?理想情况下,它应该重用现有机制,但格式应类似于默认的 ToString() 实现。

更新:例如,将我的自定义字段添加到 base.ToString() 文本中并不理想,恕我直言

PimTool.Utilities.OERestServiceUnavailableException: test ---> System.InvalidOperationException: inner message
   --- End of inner exception stack trace ---
   at PimTool.Tests.Services.OE.OERestClientTests.ExceptionsLogging() in D:\svn\NewPimTool\PimTool.Tests\Services\OE\OERestClientTests.cs:line 178, 
   StatusCode=0, message='test', requestId='535345'

表示自定义字段写在(可能很长)异常描述的末尾。 另一方面,我希望异常类型是描述中写入的第一个信息。

更新 2:我已经为此实现了一个解决方案,请在下面寻找我自己的答案。

最佳答案

这一切都太过分了。您的异常应该只是覆盖 Message 属性。

public override String Message {
    get {  
        return base.Message + String.Format(", HttpStatusCode={0}, RequestId='{1}'", 
                    httpStatusCode, 
                    RequestId);
    }
}

Exception 类的默认 ToString 方法基本上是“ClassName: Message --> InnerException.ToString() StackTrace”。因此,覆盖 Message 会将您的消息文本准确地放在应有的位置。

关于C#:为自定义异常重写 ToString() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1886611/

相关文章:

c# - 如何使用 Oxyplot 创建正方形绘图区域

c# - 如何在 Asp.Net 中更改 ListBox 所选元素的背景颜色

c# - 枚举应该放在单独的文件中还是放在另一个类中?

.net - 如何在 MVC4 的 APIController 中使用我自己的依赖解析器

java - 如果服务器返回错误状态,java.net.HttpUrlConnection是否总是抛出IOException?

php - 自定义异常消息 : Best practices

c# - 使用 C# 删除 XML 节点的最快方法

启用 FIPS 的服务器中的 C# MD5 哈希

c# - 无法找到请求的 .Net Framework 数据提供程序。它可能没有安装

c# - 如何处理行为主体的异常