我尝试编写一个包含不同类型集合的学生集合的应用程序(List,ArrayList,Dictionary)
要求:
我创建了一个名为Students的实现IEnumerable接口的类
每个集合我有3个方法,每个方法都返回一个IEnunerable of Students
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()
{
}
}
如何使用上面的3个集合并迭代它们,就像有一个集合一样。目前,我正在将它们放入数组中,但我似乎无法遍历它们:
public class GetALL: IEnumerable
{
public IEnumerator GetEnumerator()
{
Students s = new Students();
IEnumerator[] enumerator = new IEnumerator[3]
{
s.getList().GetEnumerator(),
s.getDiction().GetEnumerator(),
s.getArray().GetEnumerator(),
};
return enumerator[3];
}
}
必须有一种更简单的方式或方式,它实际上可以捐赠......
由于
:)
好的,我误解了请求。
我有以下内容:
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()
{
}
}
如何返回学生列表并将其写入控制台?我希望将学生列表保留在学生对象中,然后遍历它们并打印学生列表?
这可能吗?
答案 0 :(得分:2)
您可以在三个列表中创建三个for
循环,并在每个列表中yield return
答案 1 :(得分:2)
你想要回归到底是什么?也就是说,当你说“MoveNext”时,什么类型的对象将是Current?你似乎在不同的列表中保存了不同的东西。
另外,忘了你听说过ArrayList。 ArrayList是.Net v1.1的剩余部分,当它没有泛型时。使用特定于类型的List<>
会好得多。它唯一有用的地方是当你需要一个不同对象的列表时,没有共同的基类。然而,这通常是设计糟糕的表现,无论如何都可能在List<Object>
中更好。
答案 2 :(得分:0)
重构您的GetALL类以按顺序调用子枚举器,这样当第一个MoveNext()返回false时,父类将移动到下一个子枚举器。在这种方法中,父类只是充当了将孩子们连接起来的metaenumerator。
答案 3 :(得分:0)
考虑一个相关的问题:
你有N个水果篮,每个水果都有一些水果。
你可以把篮子里的水果数量称为M,记住,M对于每个篮子都是不同的#n。
你能看到确实有两个级别的迭代吗?有两个变量,如X轴和Y轴。
要解决这个问题,你首先要在外部循环中,遍历篮子。然后,在循环内部,您正在使用一个固定的篮子。从那里,您可以设置一个内循环,迭代当前篮子中的各个水果。
答案 4 :(得分:0)
好的,现在你的Student
课真的搞砸了。根据定义,每个学生都有一个学生名单。
这里你需要三节课:
学生班级 - 你可能想要实现IList(可能来自List
一个Program类,它将包含您的Main()方法,并将为您提供Students对象,并且该方法将负责将Student对象放入Students对象。
另外,请注意List也是IEnumerable,所以你的代码是:
List<Student> e = new List<Student>();
//// blah-blah-blah
for (int i = 0; i < e.Count; i++)
{
yield return e[i];
}
完全相同:
List<Student> e = new List<Student>();
//// blah-blah-blah
return e;