一尘不染

转换清单 列出

c#

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

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
    }
}

有办法吗?


阅读 181

收藏
2020-05-19

共1个答案

一尘不染

进行此工作的方法是遍历列表并转换元素。这可以使用ConvertAll来完成:

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

您还可以使用Linq:

List<A> listOfA = new List<C>().Cast<A>().ToList();
2020-05-19