我想得到一个枚举中与给定条件匹配的所有项的索引。有比这更清洁的方式吗?
var indexes = list.Select((item, index) => new { Item = item, Index = index }).Where(o => Condition(o.Item)).Select(o => o.Index);
答案 0 :(得分:5)
使用标准的LINQ to Object方法 - 不,没有。您只能通过将查询分成几行来提高可读性:
var indexes = list.Select((item, index) => new { Item = item, Index = index })
.Where(o => Condition(o.Item))
.Select(o => o.Index);
但是,您可以为此编写扩展方法:
public static IEnumerable<int> IndexesWhere<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
int index=0;
foreach (T element in source)
{
if (predicate(element))
{
yield return index;
}
index++;
}
}