因此,假设我使用可能导致致命异常(例如网络故障)的方法构建了一个类。最佳做法是:
1) 抛出一个异常,让调用程序捕获并处理它?2) 引发调用过程为其添加处理程序的类事件?3) 抑制异常并从方法中返回 False 或 Nothing 而不是预期的结果?
如果这是一个令人恼火的微不足道的问题,我深表歉意。我是 .NET 新手
我宁愿选择选项 1。
在异常中提供尽可能多的信息,让调用者处理异常。除此之外,您还应该尝试重新抛出异常(或首先不捕获它),以便调用者可能收到原始消息和堆栈跟踪。
你几乎不应该在调用者不知道的情况下吞下异常。
不要捕获异常,除非您可以处理它并使应用程序处于已知状态。如果您捕获 System.Exception,请使用 catch 块末尾的 throw 关键字重新抛出它。
从某种意义上说,所有这些都是流行的方法,尽管什么都不返回,也称为静默失败,是相当危险的。
我会通过实际编写客户端代码来考虑我希望如何使用该库。这将很好地表明异常或处理程序是否更好。
当我构建 WCF 服务以在代码中出现异常时返回客户端错误时,我想到了这一点。
我研究了我的代码并将可能发生的错误定义为错误代码和错误消息,当客户端发生异常或错误时,我的方法将返回一个 Int errorCode。
客户端将在我的服务中使用另一种方法来了解错误是什么。
示例代码:
public string GetError(int error)
{
switch (error)
{
case 1:
_errorString = Constants.ERR_INVALID_INFORMATION;
break;
case 2:
_errorString = Constants.ERR_DELETE_FAILED;
break;
case 3:
_errorString = Constants.ERR_ADD_FAILED;
break;
case 4:
_errorString = Constants.ERR_UPDATE_FAILED;
break;
}
return _errorString;
}