Übermäßige Anzahl von Parametern in generischen Typen vermeiden
Aktualisiert: November 2007
TypeName |
AvoidExcessiveParametersOnGenericTypes |
CheckId |
CA1005 |
Kategorie |
Microsoft.Design |
Unterbrechende Änderung |
Breaking |
Ursache
Ein extern sichtbarer generischer Typ hat mehr als zwei Typparameter.
Regelbeschreibung
Je mehr Typparameter ein generischer Typ enthält, desto schwieriger ist es, zu wissen und zu behalten, was die einzelnen Typparameter darstellen. In der Regel ist dies offensichtlich bei einem Typparameter, wie in List<T>, und in bestimmten Fällen auch bei zwei Typparametern, wie in Dictionary<TKey, TValue>. Mehr als zwei Typparameter hingegen bereiten den meisten Benutzern Schwierigkeiten, so beispielsweise TooManyTypeParameters<T, K, V> in C# oder TooManyTypeParameters(Of T, K, V) in Visual Basic.
Behandlung von Verstößen
Um einen Verstoß gegen diese Regel zu beheben, ändern Sie das Design dahingehend, dass nicht mehr als zwei Typparameter verwendet werden.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnung dieser Regel, es sei denn, für das Design sind unbedingt mehr als zwei Typparameter erforderlich. Durch die Bereitstellung von generischen Typen in einer einfach zu verstehenden und verwendenden Syntax wird die Zeit, die Sie zum Erlernen benötigen, reduziert und die Übernahmerate neuer Bibliotheken erhöht.
Beispiel
Im folgenden Beispiel ist eine drei generische Typparameter definierende Klasse dargestellt, die gegen die Regel verstoßen.
Imports System
Namespace Samples
' Violates this rule
Public Class Tuple(Of T1, T2, T3)
End Class
End Namespace
using System;
namespace Samples
{
// Violates this rule
public class Tuple<T1, T2, T3>
{
}
}
using namespace System;
namespace Samples
{
// Violaties this rule
generic <typename T1, typename T2, typename T3>
public ref class Tuple
{
};
}
Verwandte Regeln
Auflistungen müssen eine generische Schnittstelle implementieren
Statische Member nicht in generischen Typen deklarieren
Generische Listen nicht verfügbar machen
Generische Typen in Membersignaturen nicht schachteln
Generische Methoden müssen den Typparameter angeben
Generische Ereignishandlerinstanzen verwenden
Nach Möglichkeit Generika verwenden