我想获取与给定条件匹配的可枚举中所有项目的索引。还有比这更干净的方法吗?
var indexes = list.Select((item, index) => new { Item = item, Index = index }).Where(o => Condition(o.Item)).Select(o => o.Index);
使用标准 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++;
}
}