CA1004: ジェネリック メソッドは型パラメーターを指定しなければなりません
Item | [値] |
---|---|
規則 ID | CA1004 |
カテゴリ | Microsoft.Design |
互換性に影響する変更点 | あり |
原因
外部から参照できるジェネリック メソッドのパラメーター シグネチャに、そのメソッドのすべての型パラメーターに対応する型が含まれていません。
規則の説明
型引数を明示的に指定するのではなく、メソッドに渡す引数の型によってジェネリック メソッドの型引数を決定する方法が推論されます。 推論を有効にするには、ジェネリック メソッドのパラメーター シグネチャに、そのメソッドの型パラメーターと同じ型のパラメーターが含まれている必要があります。 この場合、型引数を指定する必要がなくなります。 すべての型パラメーターについて推論を使用する場合、ジェネリック インスタンス メソッドを呼び出す構文と、非ジェネリック インスタンス メソッドを呼び出す構文は同じになります。 これにより、ジェネリック メソッドの使用方法が単純化されます。
違反の修正方法
この規則の違反を修正するには、メソッドの各型パラメーターと同じ型がパラメーター シグネチャに含まれるように設計を変更します。
どのようなときに警告を抑制するか
この規則による警告は抑制しないでください。 わかりやすく使いやすい構文でジェネリックスを提供すると、学習に必要な時間が短縮され、新しいライブラリの採用率が高まります。
例
次の例は、2 つのジェネリック メソッドを呼び出すための構文を示しています。 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: コレクションは、ジェネリック インターフェイスを実装しなければなりません
CA1006: ジェネリック型をメンバー シグネチャ内で入れ子にしません
CA1003:汎用イベント ハンドラーのインスタンスを使用します
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示