返回导致错误的泛型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]'.

我是选角不正确,还是不支持?

返回导致错误的泛型IList

我的印象是,我可以在.Net 4.5中做到这一点,因为反方差,

AB的亚型时,你的均值是协方差,反方差是相反的,因此X<B>X<A>的亚型(就像Action<in T>的情况一样)。

IList<T>是不变的——注意没有inout修饰符。你可能把它误认为是协变的IEnumerable<out T>

我听到你问,为什么它是不变的?IList<Dog>不能被视为IList<Animal>,否则这将导致运行时错误:

var listAnimals = listDogs as IList<Animal>();
listAnimals.Add(cat);