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ě