简单的IEnumerator使用(带示例)

时间:2011-09-05 16:10:02

标签: c# ienumerator

我无法记住在C#中使用IEnumerator的方法(但不是为什么)。我已经习惯了Java的精彩文档,可以很好地向初学者解释一切。所以,请耐心等待。

我试过从这些板上的其他答案中学习无济于事。我没有问过之前已经提出的一般性问题,而是有一个具体的例子,可以为我澄清一些事情。

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

我该怎么做?当然,除了我之外,这里的答案应该可以帮助许多人解决有关这些对象的基本问题。

5 个答案:

答案 0 :(得分:92)

以下是IEnumerator的文档。它们用于获取列表的值,其中长度不一定是提前知道的(即使它可能是)。这个词来自enumerate,意思是“逐个计算或命名”。

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

例如:

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();
}

答案 1 :(得分:16)

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 construct,或只是

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

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

其中后者使用LINQ(**)只是(*)的语法糖。

答案 2 :(得分:8)

如果我理解正确,那么在c#中,我认为你需要yield return编译器魔法。

e.g。

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

答案 3 :(得分:5)

我会做类似的事情:

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

简单的东西:)

答案 4 :(得分:4)

您也可以使用LINQ的选择方法:

var source = new[] { "Line 1", "Line 2" };

var result = source.Select(s => s + " roxxors");

在此处阅读更多Enumerable.Select Method