所以我有一个继承如下接口(interface)的基本类
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 的列表转换为 T 实现的接口(interface)类型的列表?
干杯
斯图尔特
最佳答案
我明白你为什么要这样做,但如果你仔细想想你就会意识到这是行不通的。
例如(这段代码不会编译)
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。
关于c# - 如何将 List<T> 传递给 T 实现的另一个类型列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7994476/