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 9 | 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:
- System.AccessViolationException
- System.ExecutionEngineException
- System.IndexOutOfRangeException
- System.NullReferenceException
- System.OutOfMemoryException
- System.Runtime.InteropServices.COMException
- System.Runtime.InteropServices.ExternalException
- System.Runtime.InteropServices.SEHException
- System.StackOverflowException
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.