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é