CA1004: Métodos genéricos devem fornecer um parâmetro de tipo
Item | Valor |
---|---|
RuleId | CA1004 |
Categoria | Microsoft.Design |
Alteração da falha | Quebra |
Causa
A assinatura de parâmetro de um método genérico visível externamente não contém tipos que correspondem a todos os parâmetros de tipo do método.
Descrição da regra
Inferência é como o argumento de tipo de um método genérico é determinado pelo tipo de argumento passado para o método, em vez da especificação explícita do argumento de tipo. Para habilitar a inferência, a assinatura do parâmetro de um método genérico deve incluir um parâmetro que seja do mesmo tipo do parâmetro de tipo para o método. Nesse caso, o argumento de tipo não precisa ser especificado. Quando você usa inferência para todos os parâmetros de tipo, a sintaxe para chamar métodos de instância genéricos e não genéricos é idêntica. Isso simplifica a usabilidade dos métodos genéricos.
Como corrigir violações
Para corrigir uma violação dessa regra, altere o design de modo que a assinatura de parâmetro contenha o mesmo tipo para cada parâmetro de tipo do método.
Quando suprimir avisos
Não suprima um aviso nessa regra. Fornecer genéricos em uma sintaxe fácil de entender e usar reduz o tempo necessário para aprender e aumenta a taxa de adoção de novas bibliotecas.
Exemplo
O exemplo a seguir mostra a sintaxe para chamar dois métodos genéricos. O argumento de tipo para InferredTypeArgument
é inferido, e o argumento de tipo para NotInferredTypeArgument
deve ser especificado explicitamente.
Imports System
Namespace DesignLibrary
Public Class Inference
' This method violates the rule.
Sub NotInferredTypeArgument(Of T)()
Console.WriteLine(GetType(T))
End Sub
' This method satisfies the rule.
Sub InferredTypeArgument(Of T)(sameAsTypeParameter As T)
Console.WriteLine(sameAsTypeParameter)
End Sub
End Class
Class Test
Shared Sub Main()
Dim infer As New Inference()
infer.NotInferredTypeArgument(Of Integer)()
infer.InferredTypeArgument(3)
End Sub
End Class
End Namespace
using System;
namespace DesignLibrary
{
public class Inference
{
// This method violates the rule.
public void NotInferredTypeArgument<T>()
{
Console.WriteLine(typeof(T));
}
// This method satisfies the rule.
public void InferredTypeArgument<T>(T sameAsTypeParameter)
{
Console.WriteLine(sameAsTypeParameter);
}
}
class Test
{
static void Main()
{
Inference infer = new Inference();
infer.NotInferredTypeArgument<int>();
infer.InferredTypeArgument(3);
}
}
}
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
CA1003: Usar instâncias do manipulador de eventos genérico
CA1007: Usar genéricos quando apropriado
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