CA1039 : Les listes sont fortement typées
Élément | Valeur |
---|---|
ID de la règle | CA1039 |
Category | Microsoft.Design |
Modification avec rupture | Rupture |
Cause
Le type public ou protégé implémente System.Collections.IList, mais ne fournit pas de méthode fortement typée pour une ou plusieurs des méthodes suivantes :
IList.Item
IList.Add
IList.Contains
IList.IndexOf
IList.Insert
IList.Remove
Notes
Cette règle est déconseillée. Pour plus d’informations, consultez Règles dépréciées.
Description de la règle
Cette règle nécessite que les implémentations IList fournissent des membres fortement typés afin que les utilisateurs ne soient pas tenus de caster des arguments en type System.Object quand ils utilisent les fonctionnalités fournies par l’interface. L’interface IList est implémentée par des collections d’objets accessibles par index. Cette règle suppose que le type qui implémente IList gère une collection d’instances d’un type plus fort que Object.
IList implémente les interfaces System.Collections.ICollection et System.Collections.IEnumerable. Si vous implémentez IList, vous devez fournir les membres fortement typés nécessaires pour ICollection. Si les objets de la collection étendent System.ValueType, vous devez fournir un membre fortement typé pour GetEnumerator afin d’éviter la baisse des performances provoquée par le boxing. Cela n’est pas obligatoire quand les objets de la collection ont un type référence.
Pour respecter cette règle, implémentez explicitement les membres d’interface avec des noms au format InterfaceName.InterfaceMemberName, par exemple, Add. Les membres d’interface explicites utilisent les types de données déclarés par l’interface. Implémentez les membres fortement typés avec le nom du membre d’interface, par exemple, Add
. Déclarez les membres fortement typés comme étant publics, et déclarez les paramètres et les valeurs de retour comme étant du type fort géré par la collection. Les types forts remplacent les types plus faibles comme Object et Array qui sont déclarés par l’interface.
Comment corriger les violations
Pour corriger une infraction à cette règle, implémentez explicitement les membres IList et fournissez des alternatives fortement typées pour les membres qui ont été notés précédemment. Pour obtenir du code qui implémente correctement l’interface IList et fournit les membres fortement typés nécessaires, consultez l’exemple suivant.
Quand supprimer les avertissements
Supprimez un avertissement de cette règle quand vous implémentez une nouvelle collection basée sur des objets, comme une liste liée, où les types qui étendent la nouvelle collection déterminent le type fort. Ces types doivent respecter cette règle et exposer des membres fortement typés.
Exemple
Dans l’exemple suivant, le type YourType
étend System.Collections.CollectionBase, comme doivent le faire toutes les collections fortement typées. CollectionBase fournit l’implémentation explicite de l’interface IList pour vous. Par conséquent, vous devez uniquement fournir les membres fortement typés pour IList et ICollection.
using System;
using System.Collections;
namespace DesignLibrary
{
public class YourType
{
// Implementation for your strong type goes here.
public YourType() {}
}
public class YourTypeCollection : CollectionBase
{
// Provide the strongly typed members for IList.
public YourType this[int index]
{
get
{
return (YourType) ((IList)this)[index];
}
set
{
((IList)this)[index] = value;
}
}
public int Add(YourType value)
{
return ((IList)this).Add ((object) value);
}
public bool Contains(YourType value)
{
return ((IList)this).Contains((object) value);
}
public void Insert(int index, YourType value)
{
((IList)this).Insert(index, (object) value);
}
public void Remove(YourType value)
{
((IList)this).Remove((object) value);
}
public int IndexOf(YourType value)
{
return ((IList)this).IndexOf((object) value);
}
// Provide the strongly typed member for ICollection.
public void CopyTo(YourType[] array, int index)
{
((ICollection)this).CopyTo(array, index);
}
}
}
Règles associées
CA1035 : Les implémentations ICollection possèdent des membres fortement typés
CA1038 : Les énumérateurs doivent être fortement typés
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour