C#:从其基类的实例返回继承类(泛型列表)

标签 c# inheritance generic-list

这可能是我完全倒着记事,但我想知道更多关于我做错了什么......

我已经声明一个类只不过是从泛型列表直接继承(这样做是为了简化命名),像这样:

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/

相关文章:

C#反射,获取重载方法

C# - 您可以在通用列表中单独循环遍历类型吗?

c# - 在 PostgreSQL 中锁定表

c# - 以编程方式授予进程权限

c# - 将 HTTPS 开发者证书保存到当前用户个人证书存储时出错

c++ - 具有派生成员函数指针的多态性?

C++ 多重继承和虚拟继承

c# - 是否可以使用 WPF 在 c# 中更改 FormattedText 的 TextOptions?

iphone - 带有 Nib 文件和继承的 UIViewController

powershell - 根据属性值获取通用/列表中对象的索引