我怎样才能通过一个列表<到T实现的另一个类型的List

本文关键字:列表 实现 类型 另一个 一个 List | 更新日期: 2023-09-27 18:13:30

所以我有一个继承了如下接口的基本类

public interface IRefDataItem
{
    int RefID { get; set; }
string Code { get; set; }
}
public class RACodeItem : IRefDataItem
{
    public int RefID { get; set; }
    public string Code { get; set; }
}

然后我有一个返回RACodeItem列表的方法,我试图将其分配给IRefDataItem列表,如下所示

List<IRefDataItem> codes = GetRACodes( ); //GetRACodes returns List of RACodeItem 

我在这里得到一个错误,说明不能隐式地将RACodeItem类型的列表转换为IRefDataItem的列表,尽管RACodeItem继承了IRefDataItem

我是不是错过了一些简单的东西?如何将T的List强制转换为T实现的接口类型的List ?

欢呼斯图尔特

我怎样才能通过一个列表<到T实现的另一个类型的List

我明白你为什么要这样做,但如果你考虑一下,你会意识到这是行不通的。

例如(此代码无法编译)

public interface ITest
{
}
public class Test1 : ITest
{
}
public class Test2 : ITest
{ }

static void Main(string[] args)
{
    List<ITest> list = new List<Test1>();
    list.Add(new Test1());
    list.Add(new Test2());
}

问题是您不能将Test2添加到Test1的列表中。将列表声明为List<ITest> list = new List<ITest>();将编译,并且您可以添加Test1和Test2。

假设您有以下层次结构。动物->马,猫现在你有了List。你可以把马和猫都分配给它。但是我们的列表应该有相同类型的动物。

Eric Lippert对此有一个很好的博客。http://blogs.msdn.com/b/ericlippert/archive/2007/10/16/covariance-and-contravariance-in-c-part-one.aspx