How to make the class as an IEnumerable in C#?

前端 未结 5 1495
长情又很酷
长情又很酷 2020-12-31 01:07

So I\'ve got a class and a generic List inside of it, but it is private.

class Contacts
{
    List contacts;
    ...
}

I wan

相关标签:
5条回答
  • 2020-12-31 01:42

    Implement the interface IEnumerable:

    class Contacts : IEnumerable<Contact>
    {
        List<Contact> contacts;
    
        #region Implementation of IEnumerable
        public IEnumerator<Contact> GetEnumerator()
        {
            return contacts.GetEnumerator();
        }
    
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
        #endregion
    }
    
    0 讨论(0)
  • 2020-12-31 01:43
    class Program
    {
        static void Main(string[] args)
        {
            var list = new Contacts();
            var a = new Contact() { Name = "a" };
            var b = new Contact() { Name = "b" };
            var c = new Contact() { Name = "c" };
            var d = new Contact() { Name = "d" };
            list.ContactList = new List<Contact>();
            list.ContactList.Add(a);
            list.ContactList.Add(b);
            list.ContactList.Add(c);
            list.ContactList.Add(d);
    
            foreach (var i in list)
            {
                Console.WriteLine(i.Name);
            }
        }
    }
    
    class Contacts : IEnumerable<Contact>
    {
        public List<Contact> ContactList { get; set; }
    
        public IEnumerator<Contact> GetEnumerator()
        {
            return ContactList.GetEnumerator();
        }
    
        IEnumerator IEnumerable.GetEnumerator()
        {
            return ContactList.GetEnumerator();
        }
    }
    
    class Contact
    {
        public string Name { get; set; }
    }
    
    0 讨论(0)
  • 2020-12-31 01:47

    How about just extending List<Contact>

    If you don't want to extend any other class its a very simple, fast option:

    class Contacts :List<Contact>
    {   
    }
    
    0 讨论(0)
  • 2020-12-31 01:49
    public class Contacts: IEnumerable
    {
         ...... 
        public IEnumerator GetEnumerator()
        {
            return contacts.GetEnumerator();
        }
    }
    

    Should do a trick for you.

    0 讨论(0)
  • 2020-12-31 02:00

    Or return an IEnumerator<Contact> by providing a GetEnumerator method:

    class Contacts
    {
        List<Contact> contacts;
    
        public IEnumerator<Contact> GetEnumerator()
        {
            foreach (var contact in contacts)
                yield return contact;
        }
    }
    

    The foreach looks for GetEnumerator. Have a look here for the language specification details regarding this: https://stackoverflow.com/a/3679993/284240

    How to make a Visual C# class usable in a foreach statement

    0 讨论(0)
提交回复
热议问题