获取所有匹配项的索引

时间:2013-04-09 15:02:56

标签: c# linq

我想得到一个枚举中与给定条件匹配的所有项的索引。有比这更清洁的方式吗?

var indexes = list.Select((item, index) => new { Item = item, Index = index }).Where(o => Condition(o.Item)).Select(o => o.Index);

1 个答案:

答案 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++;
    }
}