CA1004: os métodos genéricos devem fornecer o parâmetro de tipo
TypeName |
GenericMethodsShouldProvideTypeParameter |
CheckId |
CA1004 |
Categoria |
Microsoft.Design |
Alteração Significativa |
Quebra |
Causa
A assinatura de um método genérico externamente visível não contém tipos que correspondem aos parâmetros de tipo do método.
Descrição da Regra
A inferência é como o argumento de tipo de um método genérico é determinado pelo tipo de argumento transmitido ao método, em vez pela especificação explícita do argumento de tipo.Para habilitar a inferência, a assinatura de 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 do tipo não precisa ser especificado.Quando você usa a inferência para todos os parâmetros de tipo, a sintaxe para chamar métodos genéricos e não da instância é idêntica.Isso simplifica a utilidade de métodos genéricos.
Como Corrigir Violações
Para corrigir uma violação desta regra, modificar o design de modo que a assinatura do parâmetro contém o mesmo tipo para cada parâmetro de tipo do método.
Quando Suprimir Alertas
Não elimine um alerta desta regra.Fornecer produtos genéricas em uma sintaxe que seja fácil de entender e em uso reduz o tempo necessário para conhecer 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 explicitamente especificado.
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: as coleções devem implementar a 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éricos
CA1007: usar genéricos quando apropriado