共用方式為


CA1004:泛型方法應該提供類型參數

型別名稱

GenericMethodsShouldProvideTypeParameter

CheckId

CA1004

分類

Microsoft.Design

中斷變更

中斷

原因

外部可見之泛型方法的參數簽章不包含對應到此方法之所有型別參數的型別。

規則描述

推斷是指如何利用傳遞到泛型方法的引數型別,而不是利用型別引數的明確規格,來決定泛型方法的型別引數。若要啟用推斷,泛型方法的參數簽章必須包含與方法之型別參數具有相同型別的參數。在上述情形中,不必指定型別引數。使用所有型別參數的推斷時,呼叫泛型和非泛型執行個體方法 (Instance Method) 之語法是相同的。這會簡化泛型方法的可用性。

如何修正違規

若要修正此規則的違規情形,請變更設計,讓參數簽章包含與方法之每個型別參數相同的型別參數。

隱藏警告的時機

請勿隱藏此規則的警告。使用易於了解和使用的語法提供泛型,以便減少學習所需的時間,並增加新程式庫的採用率。

範例

下列範例會顯示呼叫兩個泛型方法的語法。InferredTypeArgument 的型別引數是推斷的,而 NotInferredTypeArgument 的型別引數則必須明確指定。

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:避免在泛型類型上包含過多參數

CA1010:集合應該實作泛型介面

CA1000:不要在泛型類型上宣告靜態成員

CA1002:不要公開泛型清單

CA1006:不要在成員簽章中巢狀化泛型類型

CA1003:必須使用一般事件處理常式執行個體

CA1007:建議在適當時使用泛型

請參閱

參考

泛型 (C# 程式設計手冊)