我手动将Java转换为C#并具有以下代码:
for (Iterator<SGroup> theSGroupIterator = SGroup.getSGroupIterator();
theSGroupIterator.hasNext();)
{
SGroup nextSGroup = theSGroupIterator.next();
}
C#中是否有Iterator<T>
,还是有更好的C#成语?
答案 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