C# 自定义迭代器实现

Tom*_*Tom 4 keyword operator-keyword c#-2.0

我有一个类,比如 Myclass,有一个列表变量,比如字符串列表,我想从 Myclass 对象实例外部调用它,在一个循环中,简洁地像:

Myclass myclass = new Myclass();

foreach (string s in myclass)
{
}
Run Code Online (Sandbox Code Playgroud)

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

(不确定这是否是好的做法,但有时它会派上用场)。

rah*_*dev 6

Foreach 基本上适用于序列。您MyClass需要实现 IEnumerable 并最终通过 GetEnumerator 返回 IEnumerator 实现。

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

您可以通过在 C# 中搜索迭代器来获得更多信息。添加简短的片段,以便您可以想象我的意思:

 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())
            {

            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助..

  • 感谢您为编写示例代码付出的额外努力。它总是有帮助的。干杯! (2认同)