Bien que la mise en œuvre d'une conception en utilisant des collections génériques imbriqués, je suis tombé sur ces limitations causées apparemment par Generics invariantes de C#:Collections génériques imbriquées: comment implémenter la référence d'un élément vers un conteneur?
Cannot convert from 'Collection<subtype of T> to 'Collection<T>'
Cela signifie, ce qui suit ne fonctionnera pas, apparemment en raison de l'invariance de Génériques:
class Outer<TInner, TInnerItem> where TInner : Inner<TInnerItem>
{
public void Add(TInner item)
{
item.Outer = this; // ERROR:
// Cannot implicitly convert from Outer<TInner, TInnerItem>
// to Outer<Inner<TInnerItem>, TInnerItem>
}
}
class Inner<TInnerItem> : ICollection<TInnerItem>
{
Outer<Inner<TInnerItem>, TInnerItem> _outer;
public Outer<Inner<TInnerItem>, TInnerItem> Outer
{
set { _outer = value; }
}
}
(Dans le code actuel, à la fois Inner<>
et Outer<>
mettre en œuvre ICollection<>
.)
J'ai besoin Inner<>
objets pour avoir une référence à sa collection de conteneurs afin d'accéder à certaines de ses données.
Comment implémenteriez-vous ces collections imbriquées, de préférence en utilisant une approche générique comme indiqué ci-dessus? Comment définiriez-vous la référence à la collection de conteneurs dans la classe Inner<>
?
À la votre!
Je ne peux pas envelopper ma tête autour de vos cours. Si vous leur donnez des noms plus distincts, je peux peut-être essayer de comprendre ce que vous essayez de faire. – DonkeyMaster