由linq列出的FindIndex

时间:2014-04-03 07:18:47

标签: c# linq linq-to-objects

我如何使用linq获取索引?我想通过FieldNo找到并返回索引。如果我搜索2,则应该返回索引1。

enter image description here

此致

3 个答案:

答案 0 :(得分:5)

使用LINQ:

int index = fields.Select((f, i) => new { Field = f, Index = i})
    .Where(x => x.Field.FieldNo == 2)
    .Select(x => x.Index)
    .DefaultIfEmpty(-1)
    .FirstOrDefault();

没有使用List.FindIndex的LINQ,更具可读性和效率,甚至可以在.NET 2上使用:

int index = fields.FindIndex(f => f.FieldNo == 2);

答案 1 :(得分:1)

如果我理解你的问题,那就是你需要的:

Field field = Field.Where(x => x.FieldNo == 2).FirstOrDefault();
if (field != null)
    {
        Field.IndexOf(field);
    }

答案 2 :(得分:0)

我认为你可以使用overload的{​​{1}},

.Select
像这样:

public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, int, TResult> selector);

但我认为如果你的收藏在内存中会有效,否则会导致异常