简单的IEnumerator使用(带示例)
本文关键字:IEnumerator 使用 简单 | 更新日期: 2023-09-27 18:07:30
我很难记住如何在 C# 中使用 IEnumerator
s。 我已经习惯了Java的精彩文档,它很好地向初学者解释了一切。所以,请耐心等待。
我试图从这些板上的其他答案中学习,但无济于事。与其问一个以前已经问过的一般性问题,我有一个具体的例子可以为我澄清事情。
假设我有一个需要传递IEnumerable<String>
对象的方法。 该方法需要做的就是将字母roxxors
连接到迭代器中每个String
的末尾。然后它将返回这个新的迭代器(当然,原始IEnumerable
对象保持原样(。
我该怎么做? 当然,除了我之外,这里的答案应该可以帮助许多人解决有关这些对象的基本问题。
这是关于IEnumerator
的文档。它们用于获取列表的值,其中长度不一定提前知道(即使可能是(。这个词来自enumerate
,意思是"逐个数数或命名"。
IEnumerator
和IEnumerator<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();
}
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";
}
}
使用收益结构,或者只是
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 方法:
var source = new[] { "Line 1", "Line 2" };
var result = source.Select(s => s + " roxxors");
在此处阅读更多内容 枚举。选择方法