什么是Java中Iterator的c#等价物

时间:2009-10-17 09:26:59

标签: c# java iterator

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

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

C#中是否有Iterator<T>,还是有更好的C#成语?

4 个答案:

答案 0 :(得分:21)

C#中的直接等价物是IEnumerator<T>,代码看起来像这样:

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

然而,惯用的方式是:

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

并让GetSGroupIterator返回IEnumerable<T>(并可能将其重命名为GetSGroups()或类似内容。)

答案 1 :(得分:3)

在.NET中,您将使用IEnumerable<T>接口。这将返回IEnumerator<T>,您可以调用MoveNext方法和Current属性来迭代序列。

在C#中,foreach关键字为您完成所有这些操作。有关如何使用foreach的示例,请访问:

http://msdn.microsoft.com/en-us/library/ttw7t8t6(VS.80).aspx

答案 2 :(得分:0)

是的,在C#中,它被称为Enumerator

答案 3 :(得分:0)

即使C#通过IEnumerator / IEnumerable支持这一点,也有一个更好的习语:foreach

foreach (SGroup nextSGroup in items)
{
    //...
}

有关详细信息,请参阅MSDN: http://msdn.microsoft.com/en-us/library/aa664754(VS.71).aspx