如何在C#中转发基类集合?

Guy*_*Guy 5 c#

在C#中,我有一个我无法修改的A类.从这个类我创建了B类(即继承自A),它增加了一些属性.我还有一个静态函数,<A>在调用GetListOfA()时返回List .

如何将GetListOfA()的返回值转换为List <B>

例如,将列表<B>bList = foo.GetListOfA()列为List<B>

Ben*_*n M 7

如果您使用的是C#3.0(Visual Studio 2008),则可以:

using System.Linq;

List<B> bList = foo.GetListOfA().Cast<B>().ToList();
Run Code Online (Sandbox Code Playgroud)


Rub*_*ink 5

使用System.Linq,你可以说

List<B> bList = foo.GetListOfA().Cast<B>().ToList()
Run Code Online (Sandbox Code Playgroud)

要么

var bs = foo.GetListOfA().Cast<B>()
Run Code Online (Sandbox Code Playgroud)

要么

static class AExts
{
    public List<B> AsB( this List<A> list )
    {
        return list.Cast<B>().ToList();
    }
}

List<B> bList = foo.GetListOfA().AsB();
Run Code Online (Sandbox Code Playgroud)

要么

static class FooExts
{
    public List<B> AsB( this Foo foo )
    {
        return list.GetListOfA().AsB();
    }
}
List<B> bList = foo.AsB();
Run Code Online (Sandbox Code Playgroud)

或者,如果你没有/不能/不使用Linq,PowerCollections中的算法具有相同的功能

而且我没有看到另一个答案,即使它可能说的相同!