C# 自定义迭代器实现

C# Custom Iterator Implementation

我有一个 class,比如 Myclass,带有一个列表变量,比如字符串列表,我想在循环中从 Myclass 对象实例外部调用它, 简而言之:

Myclass myclass = new Myclass();

foreach (string s in myclass)
{
}

我怀疑它在 属性 上使用了 Myclass 中的隐式运算符关键字。语法 grrr..!有帮助吗?

(不确定这是否是个好习惯,但有时它会派上用场)。

Foreach 基本上按顺序工作。您的 MyClass 需要实施 IEnumerable 并最终 return 通过 GetEnumerator 实施 IEnumerator。

IEnumerator 基本上提供了 MoveNext 和 Current 属性,您的 foreach 循环使用它们来一个接一个地查询序列元素。

您可以通过在 C# 中搜索 Iterators 来获得更多相关信息。添加简短的片段,以便您可以直观地理解我的意思:

 public class MyIterator : IEnumerable<string>
    {
        List<string> lst = new List<string> { "hi", "hello" };
        public IEnumerator<string> GetEnumerator()
        {
            foreach(var item in lst)
            {
                yield return item;
            }
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            throw new NotImplementedException();
        }
    }

    public class Consumer
    {
        public void SomeMethod()
        {
            foreach(var item in new MyIterator())
            {

            }
        }
    }

希望这对您有所帮助..