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