gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 04:25:39 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com