如果我有一个对象列表,我想通过每个函数调用移动到下一个节点(即创建一个“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);
}
答案 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
这一行文字上方的链接有解决我的问题的方法。
感谢大家的回复和帮助!支持那些试图提供帮助并提供某些东西的人