2010-07-30 30 views
0

我知道一般的或“全线”的异常处理是一个很大的禁忌,但我相信在这种情况下它是可以的。有没有办法在C#中的静态类中捕获某种类型的所有异常?

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

因此,所有这些不同的写入/读取数据的方法,我想以某种方式处理此类中抛出的某些异常的所有实例。例如,每当抛出一个EndOfStreamException时,返回错误状态或设置特定标志。

有没有一个干净的/好的方法来做到这一点,每次读/写操作周围扔try/catch?或者,这仍然是一个不容否认的问题,因为图书馆的用户应该试着自己去接听课程的电话?

回答

2

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

+0

二进制打字机/阅读器功能已经在我自己的对象中。问题是有许多不同的功能(针对不同类型的写入/读取),我试图绕过每一个尝试/捕获这些功能。 – mphair 2010-07-30 17:27:38

+1

@mphair - 如果您有多个函数,每个函数都会调用多个读/写函数,那么您无法避免这种情况。如果你有一个函数(比如'Serialize()')调用很多其他函数,那么你可以在那里捕获异常。 – 2010-07-30 17:31:21

1

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

你可以将你的代码分成许多方法/函数吗?每个人都应该做一件事,所以你会有1或2个try-catch块。

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

1

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

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

相关问题