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,因为它们是同一个对象?

如果可以做到这一点,我该怎么做?

非常感谢!

最佳答案

它们不是同一件事。 FooListList<foo>List<foo>FindAll() 继承的 List<foo> 函数返回,是 而不是 FooList 。您将需要构建一个新的 FooList

你可以做一些事情,比如为 FooList 创建一个构造函数,它接受一个 IEnumerable<foo> 对象,如下所示:

class FooList : List<foo>
{
   public FooList(IEnumerable<foo> l)
        : base(l)
   {  }
}

或者你也可以做这样的事情:
 var list = new FooList();
 var filtered = list.FindAll(c => c.Something == "filter criteria");
 var newList = new FooList();
 newList.AddRange(filtered);
 return newList;

但是,正如其他一些答案中提到的,如果您没有添加任何功能,那么您应该只使用 using 关键字创建一个别名。

关于C#:从其基类的实例返回继承的类(通用列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3722043/

相关文章:

c# - C#项目中的神秘VBIDE引用已损坏

javascript - 定义了ECMAScript 5-用于构造和继承的通用工厂模式,[Object.create()]

string - 在Powershell中迭代字符串的通用列表(Lync聊天室成员)

c# - 重新加载 'this'的字段初始化程序

c# - 如何在RichTextBox中加载.rtf文件?

c++ - 如何授予对所有类的访问权,这些类都派生自基类

c# - 面向读者的 C# List<T> 线程安全

delphi - 如何在 Delphi 调试期间查看通用 tList

c# - BinaryFormatter字节序

php - 输入条件更严格的子类的替代方法