在从List <t>派生的类上调用基方法

时间:2015-06-04 08:50:24

标签: c# list base

我有一个派生自List的类:

MSVC

如何在B上调用List方法? E.g。

public class B : List<A>
{
}

非常感谢!

2 个答案:

答案 0 :(得分:2)

根据your comment,您希望将IEnumerable<T>.OrderBy()的结果分配给B变量。

您无法做到这一点,因为没有IEnumerable<T>(或者更确切地说是IOrderedEnumerable<T>B的隐式转换。

正如您所做的那样:

List<string> stringList = new List<string> { "foo", "bar" };
stringList = stringList.OrderBy(s => s);

你不能用自己的类型做到这一点。对于上面的代码,修复很简单:

stringList = stringList.OrderBy(s => s).ToList();

例如,您可以实现构造函数,扩展方法或隐式或显式转换来解决此问题:

public class B : List<A>
{
    public B(IEnumerable<A> items)
    {
        base.AddRange(items);
    }
}

然后分配一个新实例:

test = new B(test.OrderBy(s=>s.SomeProperty));

无论如何,你不应该继承List<T>,阅读Why not inherit from List<T>?

答案 1 :(得分:0)

如果您问如何将test.OrderBy(...)分配给test,那么您需要这样做:

IEnumerable<A> test = new B();
test = test.OrderBy(s => s.SomeProperty);

但这样做会阻止您向test添加任何内容。

你需要这样做:

B b = new B();
/* add items to `b` here */
IEnumerable<A> test = b;
test = test.OrderBy(s => s.SomeProperty);