CA2201: No provocar tipos de excepción reservados

Propiedad Value
Identificador de la regla CA2201
Título No provocar tipos de excepción reservados
Categoría Uso
La corrección es problemática o no problemática Problemático
Habilitado de forma predeterminada en .NET 8 No

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 solo los puede iniciar Common Language Runtime:

No iniciar excepciones generales

Si se inicia un tipo de excepción general, como Exception o SystemException en una biblioteca o un marco de trabajo, se obliga a los consumidores a detectar todas las excepciones, incluidas las excepciones desconocidas que no saben cómo controlar.

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

Iniciar excepciones específicas

En la tabla siguiente se muestra la excepción que se produce para varios tipos de argumentos no válidos, incluido el parámetro de valor del descriptor 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 la excepción que se produce con 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 se ha eliminado. 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 la posibilidad de crear su propio tipo derivado de Exception e inícielo.

Cómo corregir infracciones

Para corregir una infracción de esta regla, cambie el tipo de la excepción iniciada por un tipo específico que no sea uno de los tipos reservados.

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla.