实现IEnumerable问题

时间:2009-12-21 12:56:28

标签: c# ienumerable

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

foreach (string name in Persons.Names)
{
// do something
}

我该怎么做?

这些是我的课程:

 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]; }
        }
    }

4 个答案:

答案 0 :(得分:7)

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

foreach (Person p in Persons)
{
// do something with p.Name
}

您可以实现以下属性:

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

或使用Linq:

public IEnumerator<string> Names
{
    get
    {
        return persons.Select(p => p.Name);
    }
}

答案 1 :(得分:5)

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

答案 2 :(得分:2)

这个有用吗?

foreach (Person p in persons)
{
  yield return p.Name;
}

干杯 的Matthias

答案 3 :(得分:1)

请查看本文herehere,这对您的问题和情况有所帮助。