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