我有許多實現特定接口的類(ISearchable),我想返回IEnumerable的基類型( ISearchable),但我不知道如何進行轉換而不進行中間集合。將具體類型的通用集合轉換爲基類型的集合
的代碼非常簡單,域對象的實現方式之一,是像這樣:
public class account : ISearchable
{
public static IEnumerable<ISearchable> Search(string keyword)
{
// ORMVendorCollection<T> implements IQueryable<T>
ORMVendorCollection<account> results = /* linq query */
// this works if I change the return type to IEnumerable<account>
// but it uglifies client code a fair bit
return results.AsEnumerable<account>();
// this doesn't work, but it's what I'd like to achieve
return results.AsEnumerable<ISearchable>();
}
}
客戶端代碼,理想情況下是這樣的:
public static IEnumerable<ISearchable> Search(string keyword)
{
return account.Search(keyword)
.Concat<ISearchable>(order.Search(keyword))
.Concat<ISearchable>(otherDomainClass.Search(keyword));
}
謝謝賈裏德。編輯:*等待10分鐘* – 2010-09-10 17:57:12