自定义Linq扩展以替换For循环

时间:2011-01-06 04:32:23

标签: linq c#-3.0 lambda extension-methods

public static void For<T>(this IEnumerable<T> items, Action<T, int> predicate)
    {
        using (IEnumerator<T> iterator = items.GetEnumerator())
        {
            int index = 0;
            while (iterator.MoveNext())
            {
                T item = iterator.Current;
                predicate(item, index);
                index++;
            }
        }
    } 

我正在使用linq扩展来枚举列表并使用集合的索引执行操作 - 就像for循环一样。

然后你可以使用像这样的方法

items.For((item, index) => item.Prop = item.Prop != MyMethod(index) ? MyMethod(index) : item.Prop);

这看起来是对的吗?

1 个答案:

答案 0 :(得分:2)

试试这个:

public static void For<T>(this IEnumerable<T> items, Action<T, int> predicate)
{
    int i=0;
    foreach (T item in items)
    {
        predicate(item, i++);
    }
}