在使用嵌套泛型集合实现设计时,我偶然发现了显然是由 C# 的不变泛型引起的那些限制:
无法从 'Collection<subtype of T> 转换为 'Collection<T>'
这意味着,显然由于泛型的不变性,以下内容将不起作用:
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<>
类中容器集合的引用?
干杯!