Bonjour à tous,

Je souhaite créer une classe qui hérité d'un HashSet pour implémenter des méthodes personnalisées pour rechercher, récupérer les données présentes dans le HashSet contenant de simple classes.

Mes classes DroitEnfant et DroitParent héritent de AbstractClassDroit qui est une classe abstraite. Cela me permet d'avoir dans le même HashSet différentes classes mais issues d'une même base commune (cf héritage de classe).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
class HashSetDroitTest : HashSet<AbstractClassDroit>
    {
        internal HashSetDroitTest() { }
 
        internal bool HasChildren(string KeyParent)
        {
            return this.Where(dr => dr.Type.Equals(TypeElement.Enfant))
                            .Cast<DroitEnfant>()
                            .Any(drEnf => drEnf.KeyParent.Equals(KeyParent));
        }
 
        internal IEnumerable<DroitEnfant> GetChildrenCollection(string KeyParent)
        {
            return this.Where(dr => dr.Type.Equals(TypeElement.Enfant))
                            .Cast<DroitEnfant>()
                            .Where(drEnf => drEnf.KeyParent.Equals(KeyParent));
        }
    }
Pour l'instant aucun problème et je peux ajouter plusieurs fois la même instance sans qu'il détecte qu'elle sont identique ce qui est normal car la méthode IEqualityComparer du HashSet n'est pas définie lors de son initialisation.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
HashSetDroitTest Hash = new HashSetDroitTest();
Hash.Add(new DroitEnfant("a"));
Hash.Add(new DroitEnfant("a"));
Hash.Add(new DroitParent("a"));
Ça marche et normalement il me faudrait seulement une instance dans le Hashet car le paramètre des Classes DroitEnfant et DroitParent correspond à une clé unique ( comme dans les dictionnaire "Key" ).

Le problème est que lors de l'initialisation de la classe, pour instancier le HashSet qui hérite, le programme prend le constructeur par défaut et je voudrais lui dire de prendre le constructeur :
new HashSet<...>(IEquallityComparer)

Par Exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
class HashSetDroitTest : HashSet<AbstractClassDroit>(new EqualityComparer<AbstractDroit>())
{
}
Connaissez vous une façon pour modifier le constructeur par défaut lors de l'initialisation ?

J'ai essai avec les méthodes de réflexion pour modifier le HashSet dans le constructeur mais aucun résultat...

Merci pour votre aide.

A++