带迭代器的C#IEnumerable

带迭代器的C#IEnumerable,c#,C#,我试图编写一个应用程序,其中包含使用不同类型集合(列表、ArrayList、字典)的学生集合 要求: 使用C#迭代器(而不是FOREACH) 学生人数众多 我创建了一个名为Students implementing IEnumerable interface的类 我有3种收集方法,每种方法返回一组学生 public class Students : IEnumerable { //Generic List public IEnumerable getL

我试图编写一个应用程序,其中包含使用不同类型集合(列表、ArrayList、字典)的学生集合

要求:

  • 使用C#迭代器(而不是FOREACH)
  • 学生人数众多
  • 我创建了一个名为Students implementing IEnumerable interface的类

    我有3种收集方法,每种方法返回一组学生

     public class Students : IEnumerable
        {
    
            //Generic List
            public IEnumerable getList()
            {
                List<string> ListStudents = new List<string>();
                ListStudents.Add("Bob");
                ListStudents.Add("Nancy");
                for (int i = 0; i < ListStudents.Count; i++)
                {
                    yield return ListStudents[i];
                }
            }
    
            //Generic Dictionary
            public IEnumerable getDiction()
            {
                Dictionary<string, string> DicStudents = new Dictionary<string, string>();
    
                DicStudents.Add("FirstName", "Nana");
    
    
                for (int i = 0; i < DicStudents.Count; i++)
                {
                    yield return DicStudents.Values.ToList()[i];
                }
            }
    
            //Array List
            public IEnumerable getArray()
            {
                ArrayList ArrayStudents = new ArrayList { "Tom", "Noah", "Peter" };
    
                for (int i = 0; i < ArrayStudents.Count; i++)
                {
                    yield return ArrayStudents[i];
                }
            }
    
            public IEnumerator GetEnumerator()
            {
    
    
            }
    
        }
    
    必须有一个更简单的方法或者一个实际可行的方法

    谢谢

    :)


    好吧,我误解了你的要求

    我有以下资料:

    public class Student : IEnumerable
        {
            int ID;
            string Name;
            string Phone;
    
    
            public IEnumerable<Student> getStudentList()
            {
                List<Student> e = new List<Student>();
                e.Add(new Student() { Name = "Bob", ID = 20, Phone = "914-123-1234" });
                e.Add(new Student() { Name = "Jack", ID = 21, Phone = "718-123-1234" });
                e.Add(new Student() { Name = "Nancy", ID = 22, Phone = "212-123-1234" });
    
                for (int i = 0; i < e.Count; i++)
                {
    
                    yield return e[i];
    
                }
            }
            public IEnumerator GetEnumerator()
            {
    
            }
    
        }
    
    公共班级学生:IEnumerable
    {
    int-ID;
    字符串名;
    字符串电话;
    公共IEnumerable getStudentList()
    {
    列表e=新列表();
    e、 添加(newstudent(){Name=“Bob”,ID=20,Phone=“914-123-1234”});
    e、 添加(newstudent(){Name=“Jack”,ID=21,Phone=“718-123-1234”});
    e、 添加(newstudent(){Name=“Nancy”,ID=22,Phone=“212-123-1234”});
    for(int i=0;i
    如何返回学生列表并将其写入控制台?我想在Student对象中保留我的学生列表,然后遍历Student对象并打印学生列表


    这是可能的吗?

    您可以在三个列表上为
    创建三个
    循环,并在每个列表内为
    生成返回

    您可以在三个列表上为创建三个
    循环,并在每个列表内为
    生成返回重构GetALL类以按顺序调用子枚举数,这样当第一个MoveNext()返回false父类将移动到下一个子枚举数。在这种方法中,父类只是充当将子类连接在一起的元枚举器。

    重构GetALL类以按顺序调用子枚举器,以便当first MoveNext()返回false时,父类将移动到下一个子枚举器。在这种方法中,父类只是充当将子类连接在一起的元枚举器。

    您试图返回的到底是什么?也就是说,当你说“MoveNext”时,当前的对象是什么类型的?您似乎在不同的列表中保存不同的内容


    还有,忘了你听说过ArrayList。ArrayList是.NETV1.1的遗留版本,当时它没有泛型。您最好使用特定于类型的
    列表
    。它唯一有用的地方是当您需要一个不同对象的列表时,没有公共基类。然而,这通常是一个糟糕设计的标志,在
    列表中可能会更好。

    您想要返回的到底是什么?也就是说,当你说“MoveNext”时,当前的对象是什么类型的?您似乎在不同的列表中保存不同的内容


    还有,忘了你听说过ArrayList。ArrayList是.NETV1.1的遗留版本,当时它没有泛型。您最好使用特定于类型的
    列表
    。它唯一有用的地方是当您需要一个不同对象的列表时,没有公共基类。然而,这通常是一个糟糕设计的标志,在
    列表中可能会更好。

    考虑一个相关的问题:

    你有N个篮子的水果,每个篮子里都有一些水果

    你可以把篮子里水果的数量称为n,类似于M。记住,每个篮子的M都是不同的

    你能看到实际上有两个层次的迭代吗?有两个变量,如X轴和Y轴


    要解决这个问题,首先在外部循环中,迭代篮子。然后,在循环中,您使用的是一个固定的篮子。从那里,您可以设置一个内部循环,迭代当前篮子中的各个水果。

    考虑一个相关问题:

    你有N个篮子的水果,每个篮子里都有一些水果

    你可以把篮子里水果的数量称为n,类似于M。记住,每个篮子的M都是不同的

    你能看到实际上有两个层次的迭代吗?有两个变量,如X轴和Y轴


    要解决这个问题,首先在外部循环中,迭代篮子。然后,在循环中,您使用的是一个固定的篮子。从那里,您可以设置一个内部循环,以迭代当前篮子中的各个水果。

    好的,现在您的
    学生
    课程真的一团糟了。根据定义,每个学生都有一个学生列表

    您需要在这里学习三门课程:

    • 学生类-保留数据成员(应该是属性)并去掉其余的
    • 一个Students类-您可能希望实现IList(并且可能从列表中派生)

    • 一个程序类,它将包含Main()方法,并将容纳您的Students对象,该方法负责将Student对象放入Students对象中

    另外,请注意列表也是IEnumerable,因此您的代码:

            List<Student> e = new List<Student>();   
            //// blah-blah-blah   
            for (int i = 0; i < e.Count; i++)   
            {   
                yield return e[i];   
            }
    
    List e=新列表();
    ////废话废话
    for(int i=0;i
    与以下内容完全相同:

            List<Student> e = new List<Student>();   
            //// blah-blah-blah 
           return e;  
    
    List e=新列表();
    ////废话废话
    返回e;
    
    好了,现在你的
    学生
    班级真的一团糟。按照定义,每个学生都有一张学生名单

    您需要在这里学习三门课程:

    • 学生类-保留数据成员(应该是属性)并去掉其余的
    • 一个学生班-你是哪一个
              List<Student> e = new List<Student>();   
              //// blah-blah-blah 
             return e;