调用从List派生的类的基方法

本文关键字:方法 派生 List 调用 | 更新日期: 2023-09-27 17:53:08

我有一个类派生自List:

public class B : List<A>
{
}

如何在B上调用List方法?例如

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

非常感谢!

调用从List<T>派生的类的基方法

根据您的评论,您想将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>,阅读为什么不继承从列表?

如果您正在询问如何将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);