这可能是我完全倒着记事,但我想知道更多关于我做错了什么......
我已经声明一个类只不过是从泛型列表直接继承(这样做是为了简化命名),像这样:
public class FooList : List<Foo> {}
现在在另一个完全独立于此类的方法中,我试图返回此类的一个实例,但是我想根据条件过滤该类,所以我使用了 lambda 表达式:
var list = new FooList(); // imagine this fills it with different items
var filtered = list.FindAll(c => c.Something == "filter criteria");
现在根据 FindAll 方法,这应该返回一个 List[Foo]。但是,我想将此对象作为 FooList 而不是 List[Foo] 返回。我是否必须创建 FooList 的新实例并从 List[Foo] 复制项目?
如果是,为什么?为什么我不能将 List 直接转换为 FooList,因为它们是同一个对象?
如果可以做到,我该怎么做?
非常感谢!
最佳答案
您的问题是您使用了错误的工具来完成这项工作。 继承不是一种简化命名的机制;继承是一种主要设计用于 (1) 建模“是一种”业务领域对象类之间的关系,以及 (2) 实现相关类型之间实现细节的共享和特化。
如果您想简化命名,那么正确的工具就是放置
using FooList = System.Collections.Generic.List<Foo>;
在每个文件的顶部。
关于C#:从其基类的实例返回继承类(泛型列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3722043/