列表到IEnumerable与父类和子类
本文关键字:子类 父类 IEnumerable 列表 | 更新日期: 2023-09-27 18:05:35
给定以下类:
public class ContentItem : IEquatable<ContentItem>
{
...
}
和
public class Widget : ContentItem, IWidget
{
...
}
为什么我不能这样做:
List<Widget> widgets = _repository.GetItems(widgetType);
,
_repository.GetItems(widgetType)
返回IEnumerable<ContentItem>
?
本质上我已经有一个存储库实现工作在ContentItem
类,我想使用相同的存储库也工作在Widget
类基本上,因为小部件具有相同的基本属性,只引入了一些新的,只是持有一些信息(他们来自IWidget
接口),没有任何影响存储库应该如何处理类)。我不想制作另一个存储库类,只是为了用Widget
替换ContentItem
的所有出现。
我应该通过显式指定类型转换或更改存储库(或存储库接口,我也有)来进行更改吗?如果可能的话,我希望避免各种结构,如AsEnumerable()、ToList()或显式强制转换。
因为ContentItem
不是Widget
-这是反过来的。即使IEnumerable<ContentItem>
与List<Widget>
不同,您也可以通过这样做来实现您想要的:
List<Widget> widgets = _repository.GetItems(widgetType)
.OfType<Widget>()
.ToList();
但这将只工作如果你真的返回一个枚举,其中每个ContentItem
实际上是一个Widget
。