CA1007: Utilizar valores genéricos cuando sea posible

Elemento Valor
RuleId CA1007
Category Microsoft.Design
Cambio importante Problemático

Causa

Un método visible externamente contiene un parámetro de referencia de tipo System.Object y el ensamblado que lo contiene tiene como destino .NET Framework 2.0.

Descripción de la regla

Un parámetro de referencia es un parámetro que se modifica mediante la palabra clave ref (ByRef en Visual Basic). El tipo de argumento proporcionado para un parámetro de referencia debe coincidir exactamente con el tipo de parámetro de referencia. Para usar un tipo derivado del tipo de parámetro de referencia, en primer lugar se debe convertir el tipo y asignarlo a una variable del tipo de parámetro de referencia. El uso de un método genérico permite pasar al método todos los tipos, sujeto a las restricciones que puedan ser de aplicación, sin convertirlos antes al tipo del parámetro de referencia.

Cómo corregir infracciones

Para corregir una infracción de esta regla, convierta el método en genérico y reemplace el parámetro Object mediante un parámetro de tipo.

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla.

Ejemplo

En el ejemplo siguiente se muestra una rutina de intercambio de uso general que se implementa como métodos genéricos y no genéricos. Tenga en cuenta cómo se intercambian las cadenas de forma eficaz mediante el método genérico en comparación con el método no genérico.

using System;

namespace DesignLibrary
{
   public sealed class ReferenceParameters
   {
      private ReferenceParameters(){}

      // This method violates the rule.
      public static void Swap(ref object object1, ref object object2)
      {
         object temp = object1;
         object1 = object2;
         object2 = temp;
      }

      // This method satifies the rule.
      public static void GenericSwap<T>(ref T reference1, ref T reference2)
      {
         T temp = reference1;
         reference1 = reference2;
         reference2 = temp;
      }
   }

   class Test
   {
      static void Main()
      {
         string string1 = "Swap";
         string string2 = "It";

         object object1 = (object)string1;
         object object2 = (object)string2;
         ReferenceParameters.Swap(ref object1, ref object2);
         string1 = (string)object1;
         string2 = (string)object2;
         Console.WriteLine("{0} {1}", string1, string2);

         ReferenceParameters.GenericSwap(ref string1, ref string2);
         Console.WriteLine("{0} {1}", string1, string2);
      }
   }
}

CA1005: Evitar los parámetros excesivos en tipos genéricos

CA1010: Las colecciones deben implementar la interfaz genérica

CA1000: No declarar miembros estáticos en tipos genéricos

CA1002: No exponer listas genéricas

CA1006: No anidar tipos genéricos en signaturas de miembro

CA1004: Los métodos genéricos deben proporcionar un parámetro de tipo

CA1003: Utilizar instancias genéricas de controlador de eventos

Vea también

Genéricos