如何投射清单

时间:2011-07-01 03:42:34

标签: c# .net

我有一个A类和一个B类,B类是从A类继承的。 假设我有:

A a1 = new B();
A a2 = new B();
List<A> LA = new List<A>{a1, a2};

请帮我看看如何将List转换为List。我尝试使用List<B> LB = (List<B>)LA但是编译错误"Can't convert List<A> to List<B>"

请帮帮我。感谢。

注意:仅限.NET 2.0。感谢。

4 个答案:

答案 0 :(得分:5)

您必须在列表中投射每个项目,而不是整个列表。

List<A> listA = new List<A>();
List<B> listB = new List<B>();
for (int i = 0; i < listA.Count; i++)
{
    listB.Add((B)listA[i]);
}

答案 1 :(得分:2)

如果您使用的是.NET 2.0,那么我相信您会在列表中枚举并独立地投射每个元素。使用.NET 3.5,您可以使用“选择”扩展方法将它们全部转换为一行代码。

答案 2 :(得分:1)

你可以这样做:

        List<A> la = new List<A>();
        List<B> lb = new List<B>();
        foreach( A a in la )
        {
            if (a is B)
                lb.Add((B)a);
            else
            {
                // ignore or throw an exeption
            }
        }

答案 3 :(得分:0)

你可以尝试一下这些行吗?

LA.ForEach(delegate(A emp) { emp = (B)emp;  });