C# 可以(错误地)使用Exception.HelpLink识别异常对象吗?

C# 可以(错误地)使用Exception.HelpLink识别异常对象吗?,c#,.net,exception,exception-handling,custom-exceptions,C#,.net,Exception,Exception Handling,Custom Exceptions,我正在处理一个日志程序,我希望避免在重复记录同一个异常对象时重复处理该对象,因为它是通过嵌套调用结构渗透的。因此,我希望能够将异常对象格式化一次,并为格式化后的版本提供一个唯一的“异常编号”,然后以某种方式标记异常对象,以便在以后的日志调用中再次出现时能够识别它 我想到的想法是误用异常对象的帮助链接字段。我会将它设置为包含我的“异常编号”的字符串版本。然后,如果在另一个日志调用中再次出现异常对象,我就可以识别它 但这可能是个坏主意吗?有什么我没想到的陷阱吗?如果是的话,有人有更好的主意吗 编辑:

我正在处理一个日志程序,我希望避免在重复记录同一个
异常
对象时重复处理该对象,因为它是通过嵌套调用结构渗透的。因此,我希望能够将
异常
对象格式化一次,并为格式化后的版本提供一个唯一的“异常编号”,然后以某种方式标记
异常
对象,以便在以后的日志调用中再次出现时能够识别它

我想到的想法是误用
异常
对象的
帮助链接
字段。我会将它设置为包含我的“异常编号”的字符串版本。然后,如果在另一个日志调用中再次出现
异常
对象,我就可以识别它

但这可能是个坏主意吗?有什么我没想到的陷阱吗?如果是的话,有人有更好的主意吗

编辑:
为了更详细地解释这种情况,此记录器将仅用于我自己的程序

使用
Exception.HelpLink肯定是不合适的,因为记录器应该只关注以给定格式或任何默认格式记录异常信息。若同样的异常一次又一次地出现,那个就是执行程序集或程序的问题,而不是记录器的问题


更好的是,您可以探索使用
log4net
进行日志记录和自定义报告接口的选项,以格式化/分组log4.net创建/更新的日志文件或数据库表中的异常。虽然我同意Villageidiot,但我要指出,更一般地说,如果您想更改异常的行为,然后,您应该创建自己的异常类,该异常类添加用户的其他相关信息。这就是我们使用继承和多态性的原因

您可以使用向
异常添加额外信息,而不是“滥用”
HelpLink
属性。它包含提供有关异常的其他用户定义信息的键/值对。

否误用帮助链接是不可接受的。正如@Greebo提到的,如果您需要其他属性,您可以创建自己的异常类。另一种方法是使用
数据
属性,该属性是
系统.Exception
类的一部分

问题:除了日志记录之外,您的异常处理程序还做其他处理吗


如果不需要,那么您很可能不需要处理程序。只需让异常(使用finally块进行清理)在调用堆栈中冒泡,并在最外层处理它。如果您的处理程序正在处理异常,那么我不确定为什么会在堆栈的更上层出现相同的异常。我认为您更有可能创建一个新的异常,将内部异常设置为已处理的异常。

您的代码不应该在每个级别捕获和记录异常。您的代码没有理由两次看到相同的异常。这听起来很像您在使用“捕获每个异常”,这是一种主要的反模式。

谢谢您的回答。请查看我添加到问题中的编辑。我还可以提到,我目前使用的是log4net,但我正在改用自制的记录器。另外,当异常通过嵌套调用结构“渗透”时,会多次记录异常的情况对于我编写异常处理的方式来说是正常的,这是值得的…非常有效的建议,但同样,记录器需要了解自定义异常类。他可以在一些通用的日志机制之上使用特定于应用程序的层。除非在最顶层,否则不应该记录异常,以避免这些冗余记录。滥用HelpLink的想法让我忍不住大笑。我突然想到了在午夜打电话的热线电话热线……谢谢,这比参与一个可能导致深夜拨打热线电话的活动要好得多。更糟糕的是,我的意思是你不想在全国注册的财产虐待者名单上结束。我认为问这个问题本身就清楚地表明了答案是什么。