简单的IEnumerator使用(举例)

我有困难记住如何(但不是为什么)在C#中使用IEnumerator s。 我已经习惯了Java,它的精彩文档能够很好地解释初学者的一切。 所以,请和我一起承受。

我试图从这些委员会的其他答案学习无济于事。 我没有提出一个已经被问过的通用问题,而是一个具体的例子来为我澄清事情。

假设我有一个方法需要传递一个IEnumerable<String>对象。 所有的方法需要将字母roxxors连接到迭代器中每个String的末尾。 然后它将返回这个新的迭代器(当然原来的IEnumerable对象保持原样)。

我将如何去做这件事? 当然,除了我之外,这里的答案应该可以帮助很多关于这些对象的基本问题。

这里是关于IEnumerator的文档。 它们被用来获取列表的值,其中的长度不一定是提前知道的(尽pipe可能是)。 这个词来自enumerate ,意思是“一个一个地计数或者一个一个的命名”。

IEnumeratorIEnumerator<T>由所有IEnumerableIEnumerable<T>接口(后者提供了这两个接口)通过GetEnumerator()在.NET中提供。 这很重要,因为foreach语句被devise为通过这些接口方法直接与枚举器一起工作。

举个例子:

 IEnumerator enumerator = enumerable.GetEnumerator(); while (enumerator.MoveNext()) { object item = enumerator.Current; // Perform logic on the item } 

变为:

 foreach(object item in enumerable) { // Perform logic on the item } 

至于你的具体情况,几乎在.NET中的所有集合实现IEnumerable 。 因此,您可以执行以下操作:

 public IEnumerator Enumerate(IEnumerable enumerable) { // List implements IEnumerable, but could be any collection. List<string> list = new List<string>(); foreach(string value in enumerable) { list.Add(value + "roxxors"); } return list.GetEnumerator(); } 
 public IEnumerable<string> Appender(IEnumerable<string> strings) { List<string> myList = new List<string>(); foreach(string str in strings) { myList.Add(str + "roxxors"); } return myList; } 

要么

 public IEnumerable<string> Appender(IEnumerable<string> strings) { foreach(string str in strings) { yield return str + "roxxors"; } } 

使用yield结构 ,或简单地

 var newCollection = strings.Select(str => str + "roxxors"); //(*) 

要么

 var newCollection = from str in strings select str + "roxxors"; //(**) 

后者使用LINQ , (**)只是(*)语法糖。

如果我正确理解你,然后在C#的yield return编译器魔术是你所需要的,我想。

例如

 IEnumerable<string> myMethod(IEnumerable<string> sequence) { foreach(string item in sequence) { yield return item + "roxxors"; } } 

我会做这样的事情:

 private IEnumerable<string> DoWork(IEnumerable<string> data) { List<string> newData = new List<string>(); foreach(string item in data) { newData.Add(item + "roxxors"); } return newData; } 

简单的东西:)

你也可以使用LINQ的Select Method:

 var source = new[] { "Line 1", "Line 2" }; var result = source.Select(s => s + " roxxors"); 

在这里阅读更多Enumerable.Select方法