获取所有匹配项的索引

Roa*_*ich 3 c# linq

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

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

Mar*_*zek 5

使用标准的LINQ to Object方法 - 不,没有.您只能通过将查询拆分为几行来提高可读性:

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

但是,您可以为此编写扩展方法:

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++;
    }
}
Run Code Online (Sandbox Code Playgroud)