При реализации проекта с использованием вложенных универсальных коллекций я наткнулся на эти ограничения, очевидно вызванные инвариантом C # Generics:
Cannot convert from 'Collection<subtype of T> to 'Collection<T>'
Это означает, что следующее не будет работать, по-видимому, из-за неизменности Generics:
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; }
}
}
(В фактическом коде оба Inner<>
и Outer<>
реализуют ICollection<>
.)
Мне нужно, чтобы объекты Inner<>
имели ссылку на свою коллекцию контейнеров, чтобы получить доступ к некоторым ее данным.
Как бы вы реализовали эти вложенные коллекции, предпочтительно используя общий подход, как описано выше? Как бы вы указали ссылку на коллекцию контейнеров в классе Inner<>
?
Ура!