Éviter les paramètres excessifs sur les types génériques
Mise à jour : novembre 2007
TypeName |
AvoidExcessiveParametersOnGenericTypes |
CheckId |
CA1005 |
Catégorie |
Microsoft.CSharp |
Modification avec rupture |
Oui |
Cause
Un type générique visible de l'extérieur contient plus de deux paramètres de type.
Description de la règle
Plus un type générique contient de paramètres de type, plus il est difficile de déterminer et de mémoriser la représentation de chaque paramètre de type. Cela est généralement évident avec un paramètre de type, comme dans List<T>, et dans certains cas avec deux paramètres de type, comme dans Dictionary<TKey, TValue>. S'il existe plus de deux paramètres de type, la difficulté devient trop grande pour la plupart des utilisateurs, par exemple, TooManyTypeParameters<T, K, V> en C# ou TooManyTypeParameters(Of T, K, V) en Visual Basic.
Comment corriger les violations
Pour corriger une violation de cette règle, modifiez le design afin d'utiliser deux paramètres de type au maximum.
Quand supprimer les avertissements
Ne supprimez pas d'avertissement de cette règle sauf si le design nécessite absolument plus de deux paramètres de type. La fourniture de génériques dans une syntaxe facile à comprendre et à utiliser réduit le délai d'apprentissage nécessaire et augmente le taux d'adoption de nouvelles bibliothèques.
Exemple
L'exemple suivant montre une classe qui définit trois paramètres de type générique qui enfreignent la règle.
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
{
};
}
Règles connexes
Les collections doivent implémenter l'interface générique
Ne pas déclarer de membres statiques sur les types génériques
Ne pas exposer de listes génériques
Ne pas imbriquer les types génériques dans les signatures de membre
Les méthodes génériques doivent fournir le paramètre de type
Utiliser des instances du gestionnaire d'événements génériques
Utiliser des classes génériques lorsque nécessaire