有没有办法在C#中捕获静态类中某种类型的所有异常?

时间:2010-07-30 17:22:08

标签: c# try-catch

我知道一般或“全面”的异常处理是一个很大的禁忌,但我相信在这种情况下它是可以的。

考虑BinaryWriter / BinaryReader操作的一些自定义包装器。 (是的,我知道.NET序列化)在这个类的所有方法中,都有可能存在某些异常,例如传入一个byte [],这对于您尝试读取的数据来说太短了它或试图读取不正确的类型。

因此,存在所有这些用于编写/读取数据的不同方法,并且我希望以某种方式处理在此类中抛出的某些异常的所有实例。例如,每当抛出EndOfStreamException时返回错误状态或设置某个标志。

有没有一个干净/好的方法来做这个没有在每次读/写操作周围抛出try / catch?或者这仍然是一个很大的禁忌,因为图书馆的用户应该尝试自己接听课堂的电话?

3 个答案:

答案 0 :(得分:2)

您可以将BinaryWriter / Reader函数包装在您自己的对象中,并在那里捕获异常。

答案 1 :(得分:1)

在某些情况下,让用户/调用者处理异常是有意义的。当你发现异常时,你打算做什么样的事情?

您可以将代码拆分为多个方法/功能吗?每个人都应该做一件事,所以你将有1或2个try-catch块。

Exception Handling in C#: Multple Try/Catches vs. One

答案 2 :(得分:1)

这已经在其上面编写了try / catch滥用行为。您提到的任何需要捕获的条件实际上都是程序中的错误。你无法修复catch块的bug,你只能隐藏bug。用户仍然对此非常不满,她不能再使用她的旧数据了。无论你是否添加了一堆异常处理代码,最终结果都是一样的:她将卸载你的更新并向你发送一封讨厌的电子邮件。

如果由于某种原因可以接受您的更新无法再读取旧数据文件,那么请在根目录处理此问题。例如,为数据添加版本号,以便您可以轻松检测到该文件不再可用。不再需要使用例外。或者,如果更容易解开逻辑,则只需要一个异常类型。留下他们想要的所有其他例外:“这里有一些真的错误,让我们不要试图继续”。