实现IEnumerable问题

Ton*_*ion 1 c# ienumerable

我有2个类,在Persons类中我想添加使用foreach循环遍历Person集合的名称属性的能力,如下所示:

foreach (string name in Persons.Names)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

这些是我的课程:

 class Person
    {
        public string Name
        {
            get;
            set;
        }

        public string Surname
        {
            get;
            set;
        }
    }

    class Persons : IEnumerable<Person>
    {
        List<Person> persons = new List<Person>();
        public IEnumerator<Person> GetEnumerator()
        {
            foreach (Person p in persons)
            {
                yield return p;
            }
        }

        System.Collections.IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        public IEnumerator<string> Names
        {
            // implement looping through Name property of Person class
        }

        public Persons()
        {

        }

        public void Add( Person p )
        {
            persons.Add(p);
        }

        public string this[int index]
        {
            get { return this[index]; }
        }
    }
Run Code Online (Sandbox Code Playgroud)

San*_*ken 7

第一个循环可以实现如下:

foreach (Person p in Persons)
{
// do something with p.Name
}
Run Code Online (Sandbox Code Playgroud)

您可以实现以下属性:

public IEnumerator<string> Names
{
    get
    {
        foreach (Person p in persons)
        {
            yield return p.Name;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

或使用Linq:

public IEnumerator<string> Names
{
    get
    {
        return persons.Select(p => p.Name);
    }
}
Run Code Online (Sandbox Code Playgroud)


Tho*_*que 5

    public IEnumerable<string> Names
    {
        get
        {
            foreach (Person p in persons)
            {
                yield return p.Name;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)