我是否需要IEnumerator通过foreach循环运行通用列表(如果这样的话)

时间:2019-03-01 01:55:51

标签: c#

如何通过foreach循环遍历此列表,但出现一条错误消息,说其中不包含GetEnumerator的公共实例定义

    public class GenericList<T>
    {
        public void Add(T use) { }

    }       
    static void Main(string[] args)
    {
        GenericList<int> list1 = new GenericList<int>();
        list1.Add(1);
        list1.Add(2);
        list1.Add(3);
        list1.Add(4);
        list1.Add(5);
       foreach(int i in list1)
        {
            Console.WriteLine(i);
        }

1 个答案:

答案 0 :(得分:0)

因此通常只使用List,这意味着您的代码应为:

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var x= new MyIterable();

            foreach (var item in x)
            {
                Console.WriteLine(item);
            }
        }
    }

    public class MyIterable
    {
        public Item Current { get; set; }

        public bool MoveNext()
        {
            return false;
        }

        public MyIterable GetEnumerator()
        {
            return this;
        }
    }

    public class Item
    {
    }

但是,我想您要问的是在您自己的类型上使用foreach所需的条件。

答案是一些鸭子输入的编译器魔术。如果您的迭代类实现了一个名为GetEnumerator()的方法,该方法返回符合某些规则的类型(不带参数的MoveNext方法不带参数,但返回一个bool和Current属性,那么您可以使用,请参见下面最没用的迭代器:

{{1}}

请参见https://blogs.msdn.microsoft.com/kcwalina/2007/07/18/duck-notation/