考慮以下類:清單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