调用从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);
非常感谢!
根据您的评论,您想将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);