1

类似于linq find in which position is my object in List,除了他接受的答案是在对象级别进行评估。

说我有

public interface IFoo{
    string text {get;set;}
    int number {get;set;}
}

public class Foo : IFoo{
    public string text {get;set;}
    public int number {get;set;}
}

现在我有一个IFoo这样的列表集合:

public IList<IFoo> Foos;

Foos我想编写一个基于属性值和/或值(例如,textnumber在这种情况下)带回索引的方法,以便我可以执行以下操作:

var fooIndexes = Foos.GetIndexes( f => f.text == "foo" && f.number == 8 );

我该怎么写?

4

2 回答 2

4

你可以使用类似的东西:

public static IEnumerable<int> GetIndices<T>(this IEnumerable<T> items, Func<T, bool> predicate)
{
    return items.Select( (item, index) => new { Item = item, Index = index })
                     .Where(p => predicate(p.Item))
                     .Select(p => p.Index);
}
于 2012-06-04T19:46:12.000 回答
1

这是非 LINQ 实现:

public static IEnumerable<int> GetIndexes<T>(this IEnumerable<T> items, 
    Func<T, bool> predicate)
{
    int i = 0;

    foreach (T item in items)
    {
       if (predicate(item))
           yield return i;

       i++;
    }
}

在这种情况下,这可能会更有效,因为它避免了匿名类型初始化。

于 2012-06-04T19:57:36.333 回答