Sdílet prostřednictvím


CA1004: Obecné metody by měly poskytnout parametr typu

TypeName

GenericMethodsShouldProvideTypeParameter

CheckId

CA1004

Kategorie

Microsoft.Design

Narušující změna

Narušující

Příčina

Předpis parametru externě viditelné generické metody neobsahuje typy odpovídající všem parametrům typu metody.

Popis pravidla

Argument typu generické metody je z argumentu typu předávaného metodě odvozen namísto explicitního určení argumentu typu.Má-li být odvozování povoleno, musí předpis parametrů generické metody zahrnovat parametr stejného typu jako parametr typu metody.V tomto případě nemusí být argument typu zadán.Používáte-li odvození pro všechny parametry typu, je syntaxe volání generických a negenerických metod instancí identická.To zjednodušuje použití generických metod.

Jak vyřešit porušení

Chcete-li porušení tohoto pravidla opravit, změňte návrh tak, aby předpis parametrů obsahoval stejný typ pro každý parametr typu metody.

Kdy potlačit upozornění

Nepotlačujte upozornění na toto pravidlo.Poskytování generických typů v syntaxi, která je snadno pochopitelná a použitelná, urychluje učení nových knihoven a zvyšuje rychlost jejich přejímání.

Příklad

Následující příklad ukazuje syntaxi volání dvou generických metod.Argument typu metody InferredTypeArgument je odvozen, argument typu metody NotInferredTypeArgument musí být explicitně zadán.

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

Související pravidla

CA1005: Vyhněte se nadbytečným parametrům na obecných typech

CA1010: Kolekce musí implementovat obecné rozhraní

CA1000: Nedeklarujte statické členy v obecných typech

CA1002: Nezveřejňujte obecné seznamy

CA1006: Nevnořujte obecné typy v signaturách členu

CA1003: Použijte instance obecných obslužných rutin události

CA1007: Použijte obecné typy, kde je to vhodné

Viz také

Referenční dokumentace

Obecné typy (Průvodce programováním v C#)