我有一个派生自List的类:
MSVC
如何在B上调用List方法? E.g。
public class B : List<A>
{
}
非常感谢!
答案 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);