更好地处理连接到互联网的方法中发生的异常

时间:2015-11-22 21:39:15

标签: c# exception-handling switch-statement

我有很多方法连接到互联网以获取某些东西。所以我需要处理可能发生的WebException。但是我希望减少使用这些方法的代码中的try catch块,因为它看起来很难看,很难看。我现在正在做的是返回一个带有Tuple的{​​{1}}我可以用来查看该方法是否失败或成功等等。然后我使用enum和{{ 1}}块来处理它。例如:

switch

但是这些破坏陈述看起来也很混乱 通常,错误情况下只有很少的代码行。有没有更好的方法呢? (也许使用代表?)

2 个答案:

答案 0 :(得分:2)

恕我直言,你应该让异常发生。在包含失败代码的返回值中包装异常与正常的.NET惯用语是对立的,在调用者和被调用者中都需要更多代码(包括额外的try / catch处理的额外运行时成本),并且不能实现任何不能使用例外来实现。

将异常转换为失败代码也会丢失可能有用的信息,例如堆栈跟踪和InnerException值。

请注意,如果您要向异常添加信息,您的实现可以捕获发生的异常,然后抛出一个新的自定义异常,为此您提供了原始异常{{1属性值。


相关讨论,另见:
C# why throw errors
Should my method throw its own exception, or let .NET throw if a file doesn't exist?

它们不是完全相同的问题,但它们都包括讨论为什么在.NET代码中首选异常。

答案 1 :(得分:1)

我的回答是关于处理异常,这意味着它已经足够了,我们知道该怎么做;这是常规。例如,在我的应用程序中,我们只是在这些定义良好的情况下向用户显示一条消息。当然这取决于应用程序。我同意彼得的意见,即未处理的异常应该用于捕获,而不是切换。

只需返回一个类,其中包含一个友好的错误消息或空白,b)数据和c)bool成功。您可以在其中放置状态代码和/或异常数据以进行调试。通常,您只想显示或记录错误消息,如果不是成功,通常只需要在Success = true时使用数据。成功告诉您是否可以在api通话后继续。

总结一下,OO来救援。尝试使返回类更强,以便您可以根据您最终将使用这些属性执行的操作来消除切换(例如,显示错误消息)。