簡體   English   中英

我是否需要IEnumerator通過foreach循環運行通用列表(如果這樣的話)

[英]Do I need IEnumerator to run a generic list through a foreach loop if so how is it implemented

如何通過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);
        }

因此,通常只使用List,這意味着您的代碼應該是:

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

但是,我猜您在問的是在您自己的類型上使用foreach所需的內容。

答案是一些鴨子輸入的編譯器魔術。 如果您的迭代類實現了一個名為GetEnumerator()的方法,該方法返回符合某些規則的類型(不帶參數的MoveNext方法不帶參數,但返回一個bool和Current屬性,那么您可以繼續使用,請參見以下最無用的迭代器:

    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
    {
    }

參見https://blogs.msdn.microsoft.com/kcwalina/2007/07/18/duck-notation/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM