C# 获取所有匹配项的索引

C# 获取所有匹配项的索引,c#,linq,C#,Linq,我想得到一个枚举表中匹配给定条件的所有项的索引。还有比这更干净的方法吗 var indexes = list.Select((item, index) => new { Item = item, Index = index }).Where(o => Condition(o.Item)).Select(o => o.Index); 使用标准LINQ对象方法-不,没有。您只能通过将查询拆分为几行来提高可读性: var indexes = list.Select((item, i

我想得到一个枚举表中匹配给定条件的所有项的索引。还有比这更干净的方法吗

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

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

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++;
    }
}
公共静态IEnumerable indexwhere(此IEnumerable源,Func谓词)
{
int指数=0;
foreach(源中的T元素)
{
if(谓词(元素))
{
收益率指数;
}
索引++;
}
}

IEnumerable的泛型类型是什么?这可能会有所帮助-鉴于我已经有了相当广泛的扩展库,我喜欢这个解决方案。