我有一个包含一些附加字段的自定义异常类。我希望这些在 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/