我正在手动将Java代码转换为C#,以下是我的代码:
for (Iterator<SGroup> theSGroupIterator = SGroup.getSGroupIterator();
theSGroupIterator.hasNext();)
{
SGroup nextSGroup = theSGroupIterator.next();
}
在C#中是否有Iterator<T>
的等价物或者是否有更好的C#惯用语?
在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()
或类似名称)。
在.NET中,通常会使用接口IEnumerable<T>。这将返回一个IEnumerator<T>
,您可以在其上调用MoveNext方法和Current属性以遍历序列。
在C#中,foreach关键字会为您完成所有这些操作。有关如何使用foreach的示例,请参见此处:
http://msdn.microsoft.com/en-us/library/ttw7t8t6(VS.80).aspx
foreach (SGroup nextSGroup in items)
{
//...
}
详情请参阅MSDN: http://msdn.microsoft.com/zh-cn/library/aa664754(VS.71).aspx