Sdílet prostřednictvím


CA1004: Obecné metody by měl 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: Vyhnout se nadměrnému parametry na obecné typy

CA1010: Kolekce by mělo provádět obecné rozhraní

CA1000: Nelze deklarovat statické členy na obecné typy

CA1002: Obecný seznamech neuvádějí.

CA1006: Nelze vnořit obecné typy v podpisech členské

CA1003: Použít událost obecný popisovač instance

CA1007: Pomocí generics, případně

Viz také

Referenční dokumentace

Generics (Příručka programování C#)