Ответ Елисея, безусловно, будет работать, но он может быть очень неэффективным ... это зависит от того, чем реализуется allFoos
.Если это реализация IList<T>
, ElementAt
будет эффективна - но если это на самом деле результат (скажем) запроса LINQ to Objects, то запрос будет перезапущен для каждого индекса.Так что может эффективнее написать:
var allFoosList = allFoos.ToList();
// Given that we *know* allFoosList is a list, we can just use the indexer
// rather than getting ElementAt to perform the optimization on each iteration
var bestFoos = bestFooIndexes.Select(index => allFoosList[index]);
Вы можете сделать это только при необходимости, конечно:
IList<Foo> allFoosList = allFoos as IList<Foo> ?? allFoos.ToList();
var bestFoos = bestFooIndexes.Select(index => allFoosList[index]);