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

C#:从基类的实例返回继承类(泛型列表),c#,inheritance,generic-list,C#,Inheritance,Generic List,这可能是我完全倒转的记忆,但我想知道更多关于我做错了什么 我已经声明一个类只不过是从泛型列表中直接继承的(这样做是为了简化命名),如下所示: public class FooList : List<Foo> {} class FooList : List<foo> { public FooList(IEnumerable<foo> l) : base(l) { } } var list = new FooList(); v

这可能是我完全倒转的记忆,但我想知道更多关于我做错了什么

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

public class FooList : List<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;
现在根据FindAll方法,这应该返回一个List[Foo]。但是,我想以傻瓜的身份返回这个对象,而不是列表[Foo]。我是否必须创建一个新的傻瓜实例并从列表[Foo]复制项目

若然,原因为何?既然列表是同一个对象,为什么我不能直接将其转换为傻瓜呢

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


非常感谢

它们不是一回事。
傻瓜列表
是一个
列表
,但是从
列表
继承的
FindAll()
函数返回的
列表
而不是
傻瓜列表
。您将需要构造一个新的
傻瓜

您可以为
dublist
创建一个构造函数,该构造函数接受一个
IEnumerable
对象,如下所示:

public class FooList : List<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;

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

您的问题是您使用的工具不正确继承不是简化命名的机制;继承是一种机制,主要设计用于(1)建模“是一种”业务域对象类之间的关系,(2)支持在相关类型之间共享和专门化实现细节

如果您想简化命名,那么适合该作业的工具是

using FooList = System.Collections.Generic.List<Foo>;
使用dublist=System.Collections.Generic.List;

在每个文件的顶部。

不要声明新类
傻瓜
。只需使用别名。在源文件的顶部,写下:

using FooList = System.Collections.Generic.List<Foo>;
使用dublist=System.Collections.Generic.List;

现在你可以在任何地方写
傻瓜
,它将被视为与
列表

完全相同。这是我的想法,但对我来说,它似乎应该有效,但我想我确实理解为什么它无效。我知道我把它倒过来了。有没有一种方法可以从列表[Foo]中初始化愚人,或者我将分别添加每个愚人?顺便说一句,谢谢!在加号列表中有一个构造函数重载,它接受一个IEnumerable参数,因此创建一个新的傻瓜并复制值应该很容易。@PhilB+1在我不在的时候打败了我:)非常非常酷,我学到了一些新东西!我热爱我的工作:)谢谢大家的帮助!有趣的是,我以前从未听说过,我会调查的!本来应该给它添加一些功能,但我们一直没有实现。我以后一定会记住这一点,谢谢+1就这样。OP无需创建从
List
继承的
ListFoo
类来缩短代码<代码>使用
解决了根本问题。我们是否应该把它作为傻瓜的字面定义?还是要添加一些成员?