30/09/2018, 20:05

Interface IEnumerable và IEnumerator trong c# có tác dụng gì?

Mình đọc tài liệu và biết nó có tác dụng là để dùng được foreach đối với những lớp mà thực thi nó. Nhưng mình thấy nó thật là dư thừa nếu như mình dùng cách dưới đây:

class Person
    {
        private int age;
        private String name;
        public Person(int age, String name)
        {
            this.age = age;
            this.name = name;
        }
        public override string ToString()
        {
            return age + "	" + name;
        }
    }
class PersonCollection
    {
        private List<Person> list;
        //get collection list để sử dụng được foreach
        internal List<Person> List
        {
            get { return list; }
        }
        public PersonCollection()
        {
            list = new List<Person>();
        }
        public void add(Person person)
        {
            list.Add(person);
        }
    }
class Program
    {
        static void Main(string[] args)
        {
            Person p1 = new Person(20, "John");
            Person p2 = new Person(21, "Jackson");
            Person p3 = new Person(20, "Tom");
            Person p4 = new Person(19, "Cat");
            PersonCollection list = new PersonCollection();
            list.add(p1);
            list.add(p2);
            list.add(p3);
            list.add(p4);
            //ta vẫn dùng được foeach bình thường đâu cần đến IEnumerable làm gì nhỉ?
            foreach (var item in list.List)
                Console.WriteLine(item.ToString());
            Console.ReadKey();
        }
Quân viết 22:10 ngày 30/09/2018

Cũng hay, nhưng bản chất vẫn là truyền list chứ k phải tự bản thân lớp duyệt, lớp enum k phải chỉ để dùng trong foreach

Interns viết 22:08 ngày 30/09/2018

lớp enum k phải chỉ để dùng trong foreach

Bạn có thể giúp mình cho ví dụ về tác dụng của nó ngoài dùng foreach ra không? Mình đọc tài liệu mà chả hiểu nó dùng để làm gì.
P/S: Nếu bạn có tài liệu về phần này thì cho mình xin vs. Cảm ơn bạn!

NhatTa viết 22:17 ngày 30/09/2018

Theo mình nghĩ bạn nhầm giữa Interface IEnumerable và IEnumerator rồi. Chỉ có IEnumerable dùng trong vòng lặp foreach. Còn IEnumerator sử dụng while, MoveNext, current khi duyệt.
Khi duyệt thì IEnumerator lưu lại trạng thái của phần tử duyệt còn IEbumerable không lưu lại.
Đọc link này dễ hiểu cách dùng hai cái này. Theo ý kiến chủ quan thì c# tạo ra nhiều lựa chọn tùy theo bài toán cụ thể, dùng nhiều sẽ quen

advancesharp.com

IEnumerable and IEnumerator in C# with real time example :: Advance Sharp

IEnumerable and IEnumerator in C# with real time example

Bài liên quan
0