考虑以下类:清单IEnumerable的父母子女类
public class ContentItem : IEquatable<ContentItem>
{
...
}
和
public class Widget : ContentItem, IWidget
{
...
}
为什么我不能做到这一点:
List<Widget> widgets = _repository.GetItems(widgetType);
其中
_repository.GetItems(widgetType)
返回IEnumerable<ContentItem>
?
基本上我已经有一个仓库实现其在ContentItem
类的工作,我想用同一仓库还与Widget
类基本工作,因为小部件有相同的基本特性,只作了一些新的,只是持有的一些信息(它们来自IWidget
接口),并且对存储库应该如何处理该类没有任何影响)。我不想创建另一个存储库类来代替ContentItem
与Widget
的所有发生。
我应该通过明确指定强制转换还是更改我的存储库(或存储库接口,我也有)进行更改?如果可能的话,我想避免各种构造,如AsEnumerable(),ToList()或显式转换。
我可以对存储库类执行任何操作以支持具有同一个存储库的两个类? – mare
@mare:如果你想检索'Widget's,你必须在你的仓库中创建/返回'Widget'类型。如果问题只是转换,您可以在存储库中使用通用方法来创建/返回正确类型的实例。这一切都取决于你是如何真正在你的仓库中构建实例 - 他们真的是“Widget”吗? – BrokenGlass
不,他们是ContentItems。我首先得到了这些,然后才引入了Widget类。 – mare