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