Udostępnij za pośrednictwem


CA1004: Metody rodzajowe powinny dostarczyć parametr typu

TypeName

GenericMethodsShouldProvideTypeParameter

CheckId

CA1004

Kategoria

Microsoft.Design

Zmiana kluczowa

Kluczowa

Przyczyna

Podpis parametru widocznej z zewnątrz metody generycznej nie zawiera typów, które odpowiadają wszystkim parametrom typu metody.

Opis reguły

Wnioskowanie to ustalenie argumentu typu metody generycznej poprzez typ argumentu przekazanego do metody, zamiast użycia jawnej specyfikacji argumentu typu.Aby włączyć wnioskowanie, podpis parametru metody generycznej musi zawierać parametr, który jest tego samego typu co parametr typu dla metody.W tym przypadku argument typu nie musi zostać określony.W przypadku używania wnioskowania dla wszystkich parametrów typu, składnia wywołania wystąpienia metod generycznych i niegenerycznych jest identyczna.Upraszcza to użyteczność metod generycznych.

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły, należy zmienić projekt tak, aby podpis parametru zawierał ten sam typ dla każdego parametru typu metody.

Kiedy pominąć ostrzeżenia

Nie pomijaj ostrzeżeń dla tej reguły.Dostarczanie ogólników w składni, które są łatwe do zrozumienia i użycia, skraca czas wymagany do nauki i zwiększa szybkość procesu wdrażania nowych bibliotek.

Przykład

W poniższym przykładzie przedstawiono składnię wywołania dwóch metod generycznych.Argument typu dla InferredTypeArgument jest wywnioskowany a argument typu dla NotInferredTypeArgument musi zostać jawnie określony.

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

Powiązane reguły

CA1005: Uniknąć nadmiernego parametrów na typy rodzajowe

CA1010: Kolekcji należy implementować interfejs rodzajowy

CA1000: Elementy statyczne nie są deklarowane w typach podstawowych

CA1002: Nie będą uwidaczniać rodzajowy list

CA1006: Nie zagnieżdżaj typy rodzajowe w Członkowskim podpisów

CA1003: Użyj wystąpień programu obsługi zdarzeń rodzajowy

CA1007: Użyj generyczne, gdzie stosowne

Zobacz też

Informacje

Generyczne (Podręcznik programowania C#)