转到列表中的下一个元素

时间:2011-11-17 23:09:14

标签: c# object loops foreach

如果我有一个对象列表,我想通过每个函数调用移动到下一个节点(即创建一个“GetNextNode”我将如何进行此操作?现在我有一个方法将获得第一个节点我的List并将currentObj设置为它并返回它(让前一个节点仍然为null)一个标志表示我们不再处理列表中的第一个节点。然后我继续前进,我想迭代列表(使用foreach我猜?)到我的currentObj之后的一个节点。这是我的代码:

 List<Employee> ListOfEmployees = new List<Employee>();
 Employee currEmployeeObj = null;
 Employee prevEmployeeObj = null;

 foreach (Employee employee in ListOfEmployees)
        {
           //how do i keep track of the previous and current employee in here?
        }

        return (currEmployeeObj); 
    }

4 个答案:

答案 0 :(得分:7)

我讨厌听起来像恐龙,但是既然你正在使用List实现,为什么不用for代替foreach来迭代它?整数对于i == j + 1

等比较非常有用

答案 1 :(得分:4)

看起来你真的在重新发明一个枚举器:

public IEnumerator<Employee> GetEmployees()
{
    foreach (Employee employee in ListOfEmployees)
    {
        //custom processing here
        yield return employee;
    }
}

用法:

var myEnumerator = foo.GetEmployees();
while(myEnumerator.MoveNext())
{
    var someEmployee = myEnumerator.Current;
    //do something
}

正如这里的更新是完整的类实现,所以你可以验证它编译和工作..

public class Foo
{
    List<Employee> ListOfEmployees = new List<Employee>();

    public Foo()
    {
        ListOfEmployees.Add(new Employee());
    }

    public IEnumerator<Employee> GetEmployees()
    {
        foreach (Employee employee in ListOfEmployees)
            yield return employee;
    }
}

答案 2 :(得分:2)

(作为学术练习,其他答案在这里可能更合适:)

你可以像这样创建一个扩展方法:

public static IEnumerable<Tuple<T, T>> ToPairs<T>(this IEnumerable<T> enumerable)
    {
        using (var enumerator = enumerable.GetEnumerator())
        {
            if (enumerator.MoveNext())
            {
                var previous = enumerator.Current;
                while (enumerator.MoveNext())
                {
                    var current = enumerator.Current;
                    yield return new Tuple<T, T>(previous, current);
                    previous = current;
                }
            }
        }
    }

返回包含元素对的元组。

将使用如下:

foreach (var pair in ListOfEmployees.ToPairs())
{
   Employee prevEmployee = pair.Item1;
   Employee currEmployeeObj = pair.Item2;

}

答案 3 :(得分:0)

http://msdn.microsoft.com/en-us/library/system.collections.ienumerator.aspx

这一行文字上方的链接有解决我的问题的方法。

感谢大家的回复和帮助!支持那些试图提供帮助并提供某些东西的人