c# - 如何将 List<T> 传递给 T 实现的另一个类型列表

标签 c# asp.net

所以我有一个继承如下接口(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/

相关文章:

c# - 从 F# 调用 C# 异步方法会导致死锁

c# - 在子目录中托管 WCF Web 服务

c# - AsyncPostBackTrigger 仍然每隔一段时间刷新整个页面

c# - 无法跨过属性评估

c# - 将文本框绑定(bind)到列表框 SelectedItem

c# - 如何将类型传递给用户控件

javascript - Javascript (jQuery) 中的特殊字符

asp.net - 我可以将 Webrat 用于 ASP.NET 应用程序吗?

c# - AsNoTracking() 的全局设置?

c# - 谁能给我 Dotnetnuke 模块本地化示例