J'ai un certain nombre de classes qui implémentent une interface spécifique (ISearchable) et je voudrais retourner un IEnumerable du type de base (ISearchable) à partir d'une méthode statique, mais je ne suis pas sûr de savoir comment le convertir sans faire de collections intermédiaires.Conversion d'une collection générique d'un type concret en une collection d'un type de base
Le code est assez simple, l'une des implémentations de objets de domaine est comme ceci:
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>();
}
}
Le code client, ressemble parfaitement à ceci:
public static IEnumerable<ISearchable> Search(string keyword)
{
return account.Search(keyword)
.Concat<ISearchable>(order.Search(keyword))
.Concat<ISearchable>(otherDomainClass.Search(keyword));
}
Merci Jared. edit: * attend 10 minutes * –