Comparteix a través de


CA2201: No lanzar tipos de excepción reservados

Propiedad Valor
Identificador de la regla CA2201
Título No provocar tipos de excepción reservados
Categoría Uso
La corrección interrumpe o no interrumpe Ruptura
Habilitado de forma predeterminada en .NET 10 No
Idiomas aplicables C# y Visual Basic

Causa

Un método produce un tipo de excepción que es demasiado general o que está reservado por el entorno de ejecución.

Descripción de la regla

Los siguientes tipos de excepción son demasiado generales para proporcionar información suficiente al usuario:

Los siguientes tipos de excepción están reservados y deben ser lanzados solo por el tiempo de ejecución de lenguaje común:

No lanzar excepciones generales

Si lanzas un tipo de excepción general, como Exception o SystemException, en una biblioteca o un framework, obligas a los consumidores a detectar todas las excepciones, incluidas las excepciones desconocidas que no saben cómo manejar.

En su lugar, lance un tipo más derivado que ya exista en el framework, o cree su propio tipo derivado de Exception.

Lanzar excepciones específicas

En la tabla siguiente se muestra qué excepción lanzar para varios tipos de argumentos no válidos, incluido el parámetro 'value' del método de acceso set de una propiedad.

Argumento no válido Excepción
Referencia null ArgumentNullException
Fuera del intervalo permitido de valores (por ejemplo, un índice para una colección o lista) ArgumentOutOfRangeException
Valor enum no válido InvalidEnumArgumentException
Contiene un formato que no cumple las especificaciones de los parámetros de un método (como la cadena de formato de ToString(String)). FormatException
De otro modo no válido ArgumentException

En la tabla siguiente se muestra qué excepción lanzar para varios tipos de operaciones no válidas.

Operación no válida Excepción
Una operación no es válida para el estado actual de un objeto. InvalidOperationException
La operación se realiza en un objeto que ha sido descartado. ObjectDisposedException
La operación no se admite (por ejemplo, en un objeto Stream.Write invalidado en una secuencia abierta para lectura). NotSupportedException
La conversión produciría un desbordamiento (por ejemplo, en una sobrecarga de operador de conversión explícita). OverflowException

En todas las demás situaciones, considere crear su propio tipo derivado de Exception y lanzarlo.

Cómo corregir infracciones

Para corregir una infracción de esta regla, cambie el tipo de la excepción lanzada por un tipo que no sea un tipo reservado.

Example

// This code violates the rule.
throw new Exception();
throw new NullReferenceException();
throw new IndexOutOfRangeException();
// ...

// This code satisfies the rule.
throw new ArgumentException();
throw new ArgumentNullException();
throw new InvalidOperationException();
// ...

// A minimal implementation of inheritance from Exception
public class CustomException : Exception { }

// Or create your own type that derives from Exception
// This code satisfies the rule too.
throw new CustomException();

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla.