c# - 将 List<DerivedClass> 转换为 List<BaseClass>

标签 c# list inheritance collections covariance

虽然我们可以从基类/接口(interface)继承,为什么我们不能声明一个List<> 使用相同的类/接口(interface)?

interface A
{ }

class B : A
{ }

class C : B
{ }

class Test
{
    static void Main(string[] args)
    {
        A a = new C(); // OK
        List<A> listOfA = new List<C>(); // compiler Error
    }
}

有办法吗?

最佳答案

实现此功能的方法是遍历列表并强制转换元素。这可以使用 ConvertAll 来完成:

List<A> listOfA = new List<C>().ConvertAll(x => (A)x);

您还可以使用 Linq:

List<A> listOfA = new List<C>().Cast<A>().ToList();

关于c# - 将 List<DerivedClass> 转换为 List<BaseClass>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1817300/

相关文章:

c# - 如何将 F4 键发送到 C# 中的进程?

c# - 正则表达式 - 提取子串

javascript - 如何给下拉选择列表命名?

c++ - 为什么 operator = 不从模板类继承

c++类型特征: ensuring a subclass implements a method

python - Django 表单 - 设置标签

c# - 无法通过 C# oledb 将记录插入 MS Access

c# - 尝试在 Visual Studio 中连接到 Firebird 时出现访问被拒绝错误

python - 将字符串转换为列表 Python

css - 中断文本内联列表