Java中迭代器的c#等效物是什么

2022-09-03 05:33:15

我正在手动将Java转换为C#,并具有以下代码:

for (Iterator<SGroup> theSGroupIterator = SGroup.getSGroupIterator();
     theSGroupIterator.hasNext();)
{
    SGroup nextSGroup = theSGroupIterator.next();
}

在 C# 中是否有等效的,或者是否有更好的 C# 习语?Iterator<T>


答案 1

C# 中的直接等效项是 IEnumerator<T>代码如下所示:

SGroup nextSGroup;
using(IEnumerator<SGroup> enumerator = SGroup.GetSGroupEnumerator())
{
    while(enumerator.MoveNext())
    {
        nextSGroup = enumerator.Current;
    }
}

然而,惯用的方式是:

foreach(SGroup group in SGroup.GetSGroupIterator())
{
    ...
}

并返回 IEnumerable<T>(并可能将其重命名为或类似名称)。GetSGroupIteratorGetSGroups()


答案 2

通常,在 .NET 中,您将使用该接口。这将返回一个,您可以调用 MoveNext 方法和 Current 属性来循环访问序列。IEnumerable<T>IEnumerator<T>

在 C# 中,foreach 关键字可为您完成所有这些操作。有关如何使用 foreach 的示例,可在此处找到:

http://msdn.microsoft.com/en/图书馆/ttw7t8t6(VS.80).aspx