我正在编写一个程序来处理BibTeX文件到HTML代码。该程序允许用户选择将处理哪些字段或如何格式化输出HTML代码。
BibTeX文件是文本数据库。我的程序读取BibTeX文件并写入方便的对象格式,并使用此对象生成HTML。如果有任何语法错误,我的程序会捕获它。
我的问题是:我应该编写一个异常(继承自System.AplicationException),抛出它然后将其捕获到" ErrorLog"这对用户是可见的吗?
或许我应该写" ErrorLog"没有例外 - 仅限于我自己的非标准错误对象? 哪种解决方案更优雅,并且与C#编程中的良好实践保持一致?
答案 0 :(得分:1)
这取决于异常的类型和上下文。作为一般规则(当然它有"异常")如果情况特殊并且你不能提前保护自己,你应该用try-catch来处理它。
如果您正在阅读网络中的文件并且网络在您处于中间状态时失败,您将获得例外并且没有问题,您可以抓住它,通知用户并且做出重试,重新开始或停止的决定。每次读取一个字节时检查网络是否正常工作是没有意义的。
另一方面,您不应该使用异常来处理应用程序的流程。如果要读取文件,可以先检查文件是否存在,然后再开始读取。你可以尝试阅读它并捕捉和例外,但它不是那么干净。另外,考虑到创建异常会产生成本,因为您需要创建一个包含许多属性的大对象,例如堆栈跟踪。
在我看来,解析语法错误不是一种例外情况,你可以找到它,如果你想要记录它,并向用户显示一条消息,说明发生了什么。解析表达式的方法应返回一个Result对象,该对象指示是否存在错误以及错误列表(如果有)。
阅读Microsoft的这篇文章:Best Practices for Exceptions