如何迭代我的课程

时间:2015-02-03 16:39:36

标签: c#

我有两个名为PersonStaff的课程。 Person类只保留字段和属性。 Staff类实现IEnumarable接口。我想做的是让这个课程变得可以。我将在Staff上创建一个实例form_Load类,然后迭代它。但我觉得这里有些不对劲。

 public Person this[int index]
    {
        get { return Staff[index]; }
        set { Staff[index] = value; }
    }

这是我到目前为止所拥有的。我该如何解决这个问题?

public class Person
{
    private int _age;
    private string _name;

    public int Age
    {
        get { return _age; }
        set { _age = value; }
    }

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    public Person(int age, string name)
    {
        _age = age;
        _name = name;
    }
}

public class Staff : IEnumerable
{
    private List<Person> list;

    public Person this[int index]
    {
        get { return Staff[index]; }
        set { Staff[index] = value; }
    }

    public Staff(Person person)
    {
        list = new List<Person>();
        list.Add(person);
    }

    public IEnumerator GetEnumerator()
    {
        for (int i = 0; i < list.Count; i++)
        {
            yield return list[i];
        }
    }
}

1 个答案:

答案 0 :(得分:2)

确实是语法错误。这可以工作:

    static void Main(string[] args)
    {
        var staff = new Staff();
        staff.AddPerson(new Person(12, "John Doe"));
        staff.AddPerson(new Person(12, "Jande Doe"));

        foreach (var person in staff)
        {
            Console.WriteLine(person.Name);
        }

        Console.ReadLine();
    }
}

public class Person
{
    public int Age { get; private set; }

    public string Name { get; private set; }

    public Person(int age, string name)
    {
        Name = name;
        Age = age;
    }
}

public class Staff : IEnumerable<Person>
{
    private List<Person> staff = new List<Person>();

    public void AddPerson(Person p)
    {
        this.staff.Add(p);
    }

    public IEnumerator<Person> GetEnumerator()
    {
        return this.staff.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.staff.GetEnumerator();
    }
}

我的印象是你要通过员工班来列举人员的集合。您可以通过实现IEnumerable并返回人员列表的枚举器来实现。这就是我做的。 我实现了IEnumerable来返回一个强类型的枚举器并缩短了你的一些代码。希望它有所帮助。