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);
}
}
}
Reglas relacionadas
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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de