CA1007: Usar genéricos quando apropriado
Item | Valor |
---|---|
RuleId | CA1007 |
Categoria | Microsoft.Design |
Alteração da falha | Quebra |
Causa
Um método visível externamente contém um parâmetro de referência do tipo System.Object, e assembly recipiente é direcionado ao .NET Framework 2.0.
Descrição da regra
Um parâmetro de referência é um parâmetro que é modificado usando a palavra-chave ref
(ByRef
no Visual Basic). O tipo de argumento fornecido para um parâmetro de referência precisa corresponder exatamente ao tipo de parâmetro de referência. Para usar um tipo derivado do tipo de parâmetro de referência, o tipo precisa primeiro ser convertido e atribuído a uma variável do tipo de parâmetro de referência. O uso de um método genérico permite que todos os tipos, sujeitos a restrições, sejam passados para o método sem primeiramente converter o tipo no tipo de parâmetro de referência.
Como corrigir violações
Para corrigir uma violação dessa regra, torne o método genérico e substitua o parâmetro Object usando um parâmetro de tipo.
Quando suprimir avisos
Não suprima um aviso nessa regra.
Exemplo
O exemplo a seguir mostra uma rotina de troca de uso geral que é implementada como métodos genéricos e não genéricos. Observe a eficiência com que as cadeias de caracteres são trocadas usando o método genérico em comparação com o método não 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);
}
}
}
Regras relacionadas
CA1005: Evitar parâmetros excessivos em tipos genéricos
CA1010: Coleções devem implementar uma interface genérica
CA1000: Não declarar membros estáticos em tipos genéricos
CA1002: Não expor listas genéricas
CA1006: Não aninhar tipos genéricos em assinaturas de membro
CA1004: Métodos genéricos devem fornecer um parâmetro de tipo
CA1003: Usar instâncias do manipulador de eventos genérico
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários