Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
| 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:
- 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 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.