【问题标题】:what is the c# equivalent of Iterator in JavaJava中Iterator的c#等价物是什么
【发布时间】:2010-12-07 14:20:39
【问题描述】:

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

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

在 C# 中是否有与 Iterator&lt;T&gt; 等效的词,还是有更好的 C# 习语?

【问题讨论】:

    标签: c# java iterator


    【解决方案1】:

    C# 中的直接等价物是 IEnumerator&lt;T&gt;,代码如下所示:

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

    但是惯用的方式是:

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

    并让GetSGroupIterator 返回一个IEnumerable&lt;T&gt;(并可能将其重命名为GetSGroups() 或类似名称)。

    【讨论】:

      【解决方案2】:

      尽管 C# 通过 IEnumerator/IEnumerable 支持这一点,但还有一个更好的习惯用法:foreach

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

      详情见MSDN: http://msdn.microsoft.com/en-us/library/aa664754(VS.71).aspx

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          在一般的.NET 中,您将使用IEnumerable&lt;T&gt; 接口。这将返回一个 IEnumerator&lt;T&gt;,您可以调用 MoveNext 方法和 Current 属性来遍历序列。

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-11-22
            • 1970-01-01
            • 2011-10-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多