抛出异常的最佳实践

3
在定义异常时,您应该为每种可能出现的错误类型创建单独的异常,还是使用一个更通用的异常来处理多个错误条件?
例如,假设我有一个处理字符串的类,并且如果字符串格式不正确,我想抛出异常。
我应该创建单独的异常,比如:StringTooLongException(字符串太长异常),StringContainsIllegalCharactersException(字符串包含非法字符异常),StringTerminationException(字符串终止异常)?
还是只创建一个异常,如StringFormatException(字符串格式异常),并在异常中使用错误代码指示更具体的异常?

5
尽可能地,我会尝试使用框架提供的异常。例如,在你提供的例子中,我会使用System.FormatException - zimdanen
2
最佳实践是在可能的情况下尽量使用与您的异常最接近的现有异常类型。如果必须偏离,则创建特定的异常,但不要太具体,以至于开发人员需要捕获数千个异常。请记住,异常是昂贵的!因此它们应该是异常的 - Frazell Thomas
2个回答

3
这要看情况。接收异常的人是否能够根据类型采取任何有用的行动?如果可以,那么不同类型是很好的选择。如果他只能向用户展示错误消息,那么不同的.NET类型就没有用处了。如果某物没用,就不应该做。

0

在 .Net 框架中有许多现有的“通用”异常类型,例如 System.IO.IOException 涵盖了许多可能的 IO 错误,而 System.Data.SqlClient.SqlException 用于报告许多不同类型的 Sql 错误,因此我认为使用更通用的异常类型是可以的,最好是已经存在的(不要重复造轮子)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接