5

我想获取与给定条件匹配的可枚举中所有项目的索引。还有比这更干净的方法吗?

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

1 回答 1

9

使用标准 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++;
    }
}
于 2013-04-09T15:06:17.147 回答