У меня есть ряд классов, которые реализуют определенный интерфейс (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 минут * –