【发布时间】:2010-12-25 14:08:44
【问题描述】:
我有一个自定义异常类,其中包含一些附加字段。我希望将这些写在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 字段之外添加一些额外的信息,但我希望保留 ToString 格式,所有堆栈跟踪和内部异常都在它。查看 Exception.ToString() 的代码并将其复制添加更多信息会很有趣。
-
那么代码涵盖了您提到的大部分内容。虽然后来我记得我可以使用 Exception.Data 字典来存储我的自定义内容。我猜在那种情况下,这将使用 ToString() 的默认实现来呈现,但我还没有尝试过。
标签: c# .net exception tostring