如何获取枚举器列表的下一个和上一个值?

Nam*_*ama 3 .net c#

当我尝试循环枚举数列表时,如何获取下一个和上一个值。请找到以下代码。

public static void Main() 
{ 

    List<string> mylist = new List<string>(); 
    mylist.Add("C#"); 
    mylist.Add("Java"); 
    mylist.Add("C"); 
    mylist.Add("C++"); 

    // To get an Enumerator 
    // for the List. 
    List<string>.Enumerator em = mylist.GetEnumerator(); 
    display(em); 
} 

static void display(IEnumerator<string> em) 
{ 
    while (em.MoveNext()) { 
        string val = em.Current; // Want to know Next and Previous values of current value.


        Console.WriteLine(val); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 6

GetEnumerator()某种意义上说,枚举器是数据上仅向前、仅一次的游标。如果您想知道下一个值:使用MoveNext() 并查看。如果您想知道以前的值是什么:您应该记住它。由于大多数数据结构不是双向链表,而且由于枚举器甚至不一定基于存储在任何地方的数据(您可以使用迭代器块做一些非常有趣的事情),所以没有其他可能。

在 : 的特定情况下,List<T>可能使用for循环而不是您的类似foreach枚举器访问,然后您就可以使用list[i-1]and list[i+1](在检查边界条件后)。


注意:作为一般规则,您应该避免直接使用枚举器 API,除非您非常非常熟悉底层发生的事情。首选foreach或基于索引器的访问。


你可以用你自己的迭代器块概括一个三元组(上一个/当前/下一个)迭代器;输出来自{ 1, 4, 5, 1, 543, 2, 1, 54, 23 }

是:

1-4-5
4-5-1
5-1-543
1-543-2
543-2-1
2-1-54
1-54-23
Run Code Online (Sandbox Code Playgroud)

代码:

1-4-5
4-5-1
5-1-543
1-543-2
543-2-1
2-1-54
1-54-23
Run Code Online (Sandbox Code Playgroud)