Reglas de uso
Las reglas de uso admiten el uso adecuado de .NET.
En esta sección
Regla | Descripción |
---|---|
CA1801: Revisar parámetros sin utilizar | Una firma de método incluye un parámetro que no se utiliza en el cuerpo del método. |
CA1816: Llamar a GC.SuppressFinalize correctamente | Un método que es una implementación de Dispose no llama a GC.SuppressFinalize ; o bien, un método que no es una implementación de Dispose llama a GC.SuppressFinalize ; o bien, un método llama a GC.SuppressFinalize y pasa un valor distinto de this (Me en Visual Basic). |
CA2200: Reiniciar para mantener los detalles de la pila | Se vuelve a producir una excepción y se especifica explícitamente en la instrucción throw. Si se vuelve a producir una excepción especificándola en la instrucción throw, se pierde la lista de llamadas al método entre el método original que produjo la excepción y el método actual. |
CA2201: No provocar tipos de excepción reservados | Esto hace que el error original sea difícil de detectar y depurar. |
CA2207: Inicializar campos estáticos de tipo de valor insertados | Un tipo de valor declara un constructor estático explícito. Para corregir una infracción de esta regla, inicialice todos los datos estáticos cuando se declara y quite el constructor estático. |
CA2208: Crear instancias de las excepciones del argumento correctamente | Se realiza una llamada al constructor predeterminado (sin parámetros) de un tipo de excepción que es o deriva de ArgumentException, o se pasa un argumento de cadena incorrecto a un constructor con parámetros de un tipo de excepción que es o deriva de ArgumentException. |
CA2211: Los campos no constantes no deben ser visibles | Los campos estáticos que no son constantes ni de solo lectura no son seguros para subprocesos. El acceso a este tipo de campos se debe controlar cuidadosamente y se necesitan técnicas de programación avanzadas para sincronizar el acceso al objeto de clase. |
CA2213: Los campos descartables deben ser descartables | Un tipo que implementa System.IDisposable declara campos que son de tipos que también implementan IDisposable . El método Dispose del tipo declarativo no llama al método Dispose del campo. |
CA2214: No llamar a métodos reemplazables en constructores | Cuando un constructor llama a un método virtual, es posible que no se haya ejecutado el constructor para la instancia que invoca el método. |
CA2215: Los métodos Dispose deben llamar al método Dispose de la clase base | Si un tipo se hereda de un tipo descartable, debe llamar al método Dispose del tipo base desde su propio método Dispose . |
CA2216: Los tipos descartables deben declarar el finalizador | Un tipo que implementa System.IDisposable, y tiene campos que sugieren el uso de recursos no administrados, no implementa un finalizador como lo describe Object.Finalize . |
CA2217: No marcar enumeraciones con FlagsAttribute | Una enumeración visible externamente se marca con FlagsAttribute y tiene uno o varios valores que no son potencias de dos o una combinación de los otros valores definidos en la enumeración. |
CA2218: Invalidar el método GetHashCode al invalidar el método Equals | Un tipo público invalida System.Object.Equals pero no System.Object.GetHashCode. |
CA2219: No producir excepciones en cláusulas de excepción | Cuando se genera una excepción en una cláusula finally o fault, la nueva excepción oculta la excepción activa. Cuando se genera una excepción en una cláusula filter, el runtime la detecta automáticamente. Esto hace que el error original sea difícil de detectar y depurar. |
CA2224: Invalidar Equals al sobrecargar operadores de igualdad | Un tipo público implementa el operador de igualdad, pero no invalida System.Object.Equals. |
CA2225: Las sobrecargas del operador tienen alternativas con nombre | Se detectó una sobrecarga del operador y no se encontró el método alternativo con el nombre esperado. El miembro alternativo con nombre proporciona acceso a la misma funcionalidad que el operador y se ofrece para los desarrolladores que programan en lenguajes que no admiten operadores sobrecargados. |
CA2226: Los operadores deben tener sobrecargas simétricas | Un tipo implementa el operador de igualdad o de desigualdad, y no implementa el operador opuesto. |
CA2227: Las propiedades de la colección deben ser de solo lectura | Una propiedad de colección grabable permite al usuario reemplazar la colección por otra diferente. Una propiedad de sólo lectura impide que la colección se reemplace, pero sí permite establecer miembros individuales. |
CA2229: Implementar constructores de serialización | Para corregir una infracción de esta regla, implemente el constructor de serialización. Para una clase sellada, marque el constructor como privado; de lo contrario, márquelo como protegido. |
CA2231: Sobrecargar el operador equals al invalidar ValueType.Equals | Un tipo de valor invalida Object.Equals pero no implementa el operador de igualdad. |
CA2234: Pasar objetos System.Uri en lugar de cadenas | Se realiza una llamada a un método que tiene un parámetro de cadena cuyo nombre contiene "uri", "URI", "urn", "URN", "url" o "URL". El tipo declarativo del método contiene una sobrecarga de método correspondiente que tiene un parámetro System.Uri. |
CA2235: Marcar todos los campos no serializables | Un campo de instancia de un tipo que no es serializable se declara en un tipo que es serializable. |
CA2237: Marcar los tipos ISerializable con SerializableAttribute | Para que los tipos sean reconocidos como serializables por Common Language Runtime, deben estar marcados con el atributo SerializableAttribute incluso si el tipo usa una rutina de serialización personalizada mediante la implementación de la interfaz ISerializable . |
CA2241: Proporcionar argumentos correctos a los métodos de formato | El argumento de formato que se pasa a String.Format no contiene un elemento de formato que se corresponda a cada argumento de objeto o viceversa. |
CA2242: Comprobar NaN correctamente | Esta expresión prueba un valor con Single.Nan o Double.Nan . Use Single.IsNan(Single) o Double.IsNan(Double) para probar el valor. |
CA2243: Los literales de cadena de atributo se deben analizar correctamente | El parámetro de literal de cadena de un atributo no se analiza correctamente para una dirección URL, un GUID o una versión. |
CA2244: No duplicar inicializaciones de elementos indexados | Un inicializador de objeto tiene más de un inicializador de elemento indexado con el mismo índice de constante. Todo los inicializadores menos el último son redundantes. |
CA2245: No asignar una propiedad a sí misma | Una propiedad se ha asignado accidentalmente a sí misma. |
CA2246: No asignar un símbolo y su miembro en la misma instrucción | No se recomienda asignar un símbolo y su miembro, es decir, un campo o una propiedad, en la misma instrucción. No está claro si el acceso a miembros debía usar el valor anterior del símbolo antes de la asignación o el nuevo valor de la asignación en esta instrucción. |
CA2247: El argumento pasado al constructor TaskCompletionSource debe ser una enumeración TaskCreationOptions en lugar de TaskContinuationOptions | TaskCompletionSource tiene constructores que toman valores TaskCreationOptions que controlan la tarea subyacente y constructores que toman el estado del objeto almacenado en la tarea. Pasar accidentalmente un valor TaskContinuationOptions en lugar de TaskCreationOptions dará lugar a que la llamada trate las opciones como estado. |
CA2248: Proporcionar el argumento "enum" correcto para "Enum.HasFlag" | El tipo de enumeración que se pasa como argumento a la llamada de método HasFlag es diferente del tipo de enumeración que realiza la llamada. |
CA2249: Valorar la posibilidad de usar String.Contains en lugar de String.IndexOf | Las llamadas a string.IndexOf en las que se usa el resultado para comprobar la presencia o la ausencia de una subcadena se pueden reemplazar por string.Contains . |
CA2250: Usar ThrowIfCancellationRequested |
ThrowIfCancellationRequested comprueba automáticamente si el token se ha cancelado y, en su caso, produce una excepción OperationCanceledException . |
CA2251: Usar String.Equals en String.Compare |
Es más claro y probable que sea más rápido usarlo String.Equals en lugar de comparar el resultado de String.Compare con cero. |
CA2252: Participación en las características en versión preliminar | Participe en las características en versión preliminar antes de usar las API de versión preliminar. |
CA2253: Los marcadores de posición con nombre no deben ser valores numéricos | Los marcadores de posición con nombre de la plantilla de mensaje de registro no deben estar compuestos solo por caracteres numéricos. |
CA2254: La plantilla debe ser una expresión estática | La plantilla de mensaje de registro no debe variar entre llamadas. |
CA2255: El atributo ModuleInitializer no debe usarse en bibliotecas |
Los inicializadores de módulos están diseñados para que los utilice el código de aplicación para asegurarse de que los componentes de una aplicación se inicializan antes de que el código de aplicación empiece a ejecutarse. |
CA2256: Todos los miembros declarados en interfaces primarias deben tener una implementación en una interfaz con atributos DynamicInterfaceCastableImplementation | Los tipos con el atributo DynamicInterfaceCastableImplementationAttribute actúan como una implementación de interfaz para un tipo que implementa el tipo IDynamicInterfaceCastable . Como resultado, debe proporcionar una implementación de todos los miembros definidos en las interfaces heredadas, ya que el tipo que implementa IDynamicInterfaceCastable no los proporcionará de otro modo. |
CA2257: Los miembros definidos en una interfaz con 'DynamicInterfaceCastableImplementationAttribute' deben ser 'static' | Dado que un tipo que implementa IDynamicInterfaceCastable podría no implementar una interfaz dinámica en los metadatos, es probable que se produzcan errores en tiempo de ejecución en las llamadas a un miembro de la interfaz de instancia que no sea una implementación explícita definida en este tipo. Para evitar errores en tiempo de ejecución, marque los nuevos miembros de la interfaz como static . |
CA2258: No se admite proporcionar una interfaz 'DynamicInterfaceCastableImplementation' en Visual Basic | Para proporcionar una interfaz funcional que tiene como atributo DynamicInterfaceCastableImplementationAttribute hace falta la característica "Miembros de interfaz predeterminados", que no se admite en Visual Basic. |
CA2259: Asegúrese de que ThreadStatic solo se usa con campos estáticos |
ThreadStaticAttribute solo afecta a los campos static (Shared en Visual Basic). Cuando se aplica a los campos de instancia, el atributo no tiene ningún impacto en el comportamiento. |
CA2260: Implementación correcta de interfaces matemáticas genéricas | Las interfaces matemáticas genéricas requieren que se use el tipo derivado para el parámetro de tipo autoperiódico. |
CA2261: No usar ConfigureAwaitOptions.SuppressThrowing con Task<TResult> |
La opción ConfigureAwaitOptions.SuppressThrowing no es compatible con el genérico Task<TResult> , ya que podría dar lugar a devolver un valor no válido TResult . |
CA2262: establecimiento correcto de MaxResponseHeadersLength |
Asegúrese de que el valor MaxResponseHeadersLength se proporciona correctamente. Este valor se mide en kilobytes. |
CA2264: No pasar un valor que no acepta valores NULL a 'ArgumentNullException.ThrowIfNull' | 'ArgumentNullException.ThrowIfNull' se produce cuando el argumento pasado es 'null'. Algunas construcciones como estructuras que no aceptan valores NULL y 'nameof()' y 'new' nunca se conocen como null, por lo que nunca se producirá 'ArgumentNullException.ThrowIfNull'. |
CA2265: No comparar Span<T> con null o default |
Comparar un intervalo con null o default podría no hacer lo que pretendía. default y el null literal se convierten implícitamente en Span<T>.Empty . |
CA2263: preferir sobrecarga genérica cuando se conoce el tipo | El uso de una sobrecarga genérica es preferible pasar un System.Type argumento cuando se conoce el tipo, ya que promueven código más limpio y seguro para tipos con comprobaciones mejoradas en tiempo de compilación. |
Colaborar con nosotros en GitHub
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.