2 votes

Impossible d'utiliser AddRange sur une liste avec une interface

Il s'agit de Vb en .NET4, mais j'ai le même problème en C#. Nous devons utiliser des interfaces pour des raisons que je ne détaillerai pas.

Cela fonctionne, mais n'utilise pas les interfaces :

Public class PersonList
   Inherits List(of Person)
end class

Dim MyPeople as new PersonList
MyPeople.AddRange(SomeList)

J'ai besoin d'utiliser des interfaces telles que IPerson et IPersonList car nous utilisons l'injection de dépendances pour permettre le test de ces classes.

Lorsque je crée une interface pour PersonList, je ne vois plus AddRange.

Nouvelle version de PersonList utilisant une interface

Public class PersonList
   Inherits List(IPerson)
   Implements IList(Of IPerson)
   Implements IPersonList
end class

Interface for the list:
Public Interface IPersonList
   Inherits IList(Of IPerson)
end interface

Tout se construit et fonctionne comme prévu jusqu'à ce que j'essaie d'appeler AddRange :

Dim MyPeople as IPersonList = new PersonList
MyPeople.AddRange(SomeList) 'BUILD ERROR AddRange is not a member of IPersonList

Probablement IPersonList doit hériter de quelque chose qui a une implémentation de AddRange . Mais AddRange fait partie de List(of T) dont une interface ne peut hériter.

Alors comment faire pour que mon interface de liste expose AddRange ?

1voto

Meta-Knight Points 10831

Tu pourrais :

  1. Jetez le IPersonList à List(Of IPerson) puis appeler AddRange . Cela ne fonctionnera que si toutes les implémentations de IPersonList héritent de List(Of IPerson) donc ce n'est probablement pas la meilleure option.
  2. Créer un AddRange méthode d'extension pour IList(T)
  3. Utilisez une boucle au lieu de AddRange

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X