CA1004 : Les méthodes génériques doivent fournir un paramètre de typeCA1004: Generic methods should provide type parameter

TypeNameTypeName GenericMethodsShouldProvideTypeParameterGenericMethodsShouldProvideTypeParameter
CheckIdCheckId CA1004CA1004
CategoryCategory Microsoft.DesignMicrosoft.Design
Modification avec ruptureBreaking Change RuptureBreaking

CauseCause

La signature de paramètre d’une méthode générique extérieurement visible ne contient pas de types qui correspondent à tous les paramètres de type de la méthode.The parameter signature of an externally visible generic method does not contain types that correspond to all the type parameters of the method.

Description de la règleRule description

L’inférence désigne la manière dont l’argument de type d’une méthode générique est déterminé par le type d’argument passé à la méthode, au lieu d’utiliser la spécification explicite de l’argument de type.Inference is how the type argument of a generic method is determined by the type of argument that is passed to the method, instead of by the explicit specification of the type argument. Pour activer l’inférence, la signature de paramètre d’une méthode générique doit contenir un paramètre du même type que le paramètre de type de la méthode.To enable inference, the parameter signature of a generic method must include a parameter that is of the same type as the type parameter for the method. Dans ce cas, il n’est pas nécessaire de spécifier l’argument de type.In this case, the type argument does not have to be specified. Lorsque vous utilisez l’inférence pour tous les paramètres de type, la syntaxe d’appel des méthodes d’instance génériques et non génériques est identique.When you use inference for all type parameters, the syntax for calling generic and nongeneric instance methods is identical. Cela simplifie l’utilisation des méthodes génériques.This simplifies the usability of generic methods.

Comment corriger les violationsHow to fix violations

Pour corriger une violation de cette règle, modifiez la conception afin que la signature de paramètre contienne le même type pour chaque paramètre de type de la méthode.To fix a violation of this rule, change the design so that the parameter signature contains the same type for each type parameter of the method.

Quand supprimer les avertissementsWhen to suppress warnings

Ne supprimez aucun avertissement de cette règle.Do not suppress a warning from this rule. Fourniture de génériques dans une syntaxe facile à comprendre et à utiliser réduit le temps qui est nécessaire pour en savoir plus et augmente la vitesse d’adoption de nouvelles bibliothèques.Providing generics in a syntax that is easy to understand and use reduces the time that is required to learn and increases the adoption rate of new libraries.

ExempleExample

L’exemple suivant montre la syntaxe d’appel des deux méthodes génériques.The following example shows the syntax for calling two generic methods. L’argument de type pour InferredTypeArgument est déduit et l’argument de type pour NotInferredTypeArgument doit être spécifié explicitement.The type argument for InferredTypeArgument is inferred, and the type argument for NotInferredTypeArgument must be explicitly specified.

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);
      }
   }
}

CA1005 : Évitez trop de paramètres sur les types génériquesCA1005: Avoid excessive parameters on generic types

CA1010 : Les collections doivent implémenter une interface génériqueCA1010: Collections should implement generic interface

CA1000 : Ne déclarez pas de membres statiques sur les types génériquesCA1000: Do not declare static members on generic types

CA1002 : N’exposez pas de listes génériquesCA1002: Do not expose generic lists

CA1006 : Ne pas imbriquer les types génériques dans les signatures de membreCA1006: Do not nest generic types in member signatures

CA1003 : Utiliser les instances du gestionnaire d’événements génériquesCA1003: Use generic event handler instances

CA1007 : Utiliser des méthodes génériques lorsque cela est appropriéCA1007: Use generics where appropriate

Voir aussiSee also

GénériquesGenerics