返回导致错误的泛型IList
本文关键字:泛型 IList 错误 返回 | 更新日期: 2023-09-27 18:29:57
我有以下结构:
public class MyBaseClass : IGeneralClass
{
}
public class MyClass : MyBaseClass
{
...
}
public class MyDataClass
{
private List<MyClass> _data = null;
public void PopulateData()
{
...
}
public IList<IGeneralClass> Data
{
get
{
return (IList<IGeneralClass>)_data;
}
}
}
我以为我可以在.Net 4.5中做到这一点,因为存在相反的差异,但当我尝试时,我得到了如下运行时错误:
Unable to cast object of type 'System.Collections.Generic.List`1[MyClass]' to type 'System.Collections.Generic.IList`1[IGeneralClass]'.
我是选角不正确,还是不支持?
我的印象是,我可以在.Net 4.5中做到这一点,因为反方差,
当A
是B
的亚型时,你的均值是协方差,反方差是相反的,因此X<B>
是X<A>
的亚型(就像Action<in T>
的情况一样)。
IList<T>
是不变的——注意没有in
或out
修饰符。你可能把它误认为是协变的IEnumerable<out T>
。
我听到你问,为什么它是不变的?IList<Dog>
不能被视为IList<Animal>
,否则这将导致运行时错误:
var listAnimals = listDogs as IList<Animal>();
listAnimals.Add(cat);