C# 异常抛出最佳实践

C# 异常抛出最佳实践,c#,exception,C#,Exception,在定义异常时,您应该为可能发生的每种类型的错误都有单独的异常,或者为多个错误条件使用更一般的异常 例如,假设我有一个处理字符串的类,如果字符串的格式不正确,我想抛出异常 我是否会创建单独的例外,例如: StringTooLongException、StringContainessilLegalCharactersException、StringTerminationException 或者只创建一个异常,例如 StringFormatException 并指示更具体的异常,该异常中包含一个错误代

在定义异常时,您应该为可能发生的每种类型的错误都有单独的异常,或者为多个错误条件使用更一般的异常

例如,假设我有一个处理字符串的类,如果字符串的格式不正确,我想抛出异常

我是否会创建单独的例外,例如:

StringTooLongException、StringContainessilLegalCharactersException、StringTerminationException

或者只创建一个异常,例如

StringFormatException


并指示更具体的异常,该异常中包含一个错误代码?

,具体取决于。异常的接收者能否根据类型采取任何有用的操作?那么是的,有不同的类型就好了。如果他所能做的只是向用户显示错误消息,那么不同的.NET类型是没有用的,如果没有用的话,就不应该这样做。

在.NET framework中有许多现有的“通用”异常类型,例如,覆盖了许多可能的IO错误,并用于报告许多不同类型的Sql错误,因此,我认为可以使用更通用的异常类型,最好是已经存在的异常类型(不要重新发明轮子)。

如果可能,我会尝试使用框架提供的异常。例如,在您的特定示例中,我将使用以下内容:。最佳做法是使用现有的异常类型,这些类型尽可能接近您的异常。如果您必须偏离,那么创建异常是特定的,但不是特定到开发人员需要捕获一千个异常的程度。记住,例外是昂贵的!因此,它们应该是例外。