C#将for循环转换为for each(arraylist)

C#将for循环转换为for each(arraylist),c#,C#,我有一个可以工作的for循环,但是我需要实现一个foreach循环。如何更改为foreach循环 下面是一个方法中现有的working for循环 public void liststudents() { for (int i = 0; i < studentarraylist.Count; i++) { // Cast the object from the ArrayList to Student Student currentStude

我有一个可以工作的for循环,但是我需要实现一个foreach循环。如何更改为foreach循环

下面是一个方法中现有的working for循环

public void liststudents()
{
    for (int i = 0; i < studentarraylist.Count; i++)
    {
        // Cast the object from the ArrayList to Student
        Student currentStudent = (Student)studentarraylist[i];
        Console.WriteLine("Student {0} {1}", currentStudent.FirstName, currentStudent.LastName);
    }
}
public void list students()
{
for(int i=0;i
编辑


我需要将返回的对象从ArrayList强制转换为如上所示的Student对象。

您应该一直尝试解决这些初学者问题,但以下是您问题的答案:

public void ListStudents()
{
    foreach(Student student in studentArrayList)
    {
        Console.WriteLine("Student {0} {1}", student.FirstName, student.LastName);
    }
}
正是这样

我需要将返回的对象从ArrayList强制转换为Student对象,如上所示

使用foreach循环的整个要点是,您不必强制转换对象,或者更准确地说,您是在它显示的部分执行该操作

foreach (Student student in studentarraylist //here)

只有当每个对象都是学生时,这才有效。它将尝试将每个元素投射给学生。如果这不是你关心的问题,这很好

foreach(Student currentStudent in studentarraylist)
{
   Console.WriteLine("Student {0} {1}", currentStudent.FirstName, currentStudent.LastName);
}
更好的方法是完全删除
数组列表
,而使用
列表


正如其他人所指出的,如果所有的对象都是<代码>学生<代码>,那么你可以只使用<代码>为< /Cult>循环,而不使用CAST,而应该考虑使用<代码>列表< /> >(或者除<代码> AlrayList以外的任何东西)。 如果出于某种原因,您在

studentsArrayList
中存储的对象类型不是
Student
,那么您可以通过执行以下操作来获取
Student
类型:

foreach (var someObject in students)
{
    // Try to cast the object as a Student
    var studentCast = someObject as Student;

    // If it's not null, the cast succeeded
    if (studentCast != null)
    {
        Console.WriteLine("{0} {1}", studentCast.FirstName, studentCast.LastName);
    }
}
foreach (var someObject in studentsArrayList)
{
    // Try to cast the object as a Student
    var studentCast = someObject as Student;

    // If it's not null, the cast succeeded
    if (studentCast != null)
    {
        Console.WriteLine("{0} {1}", studentCast.FirstName, studentCast.LastName);
    }
}
或使用Linq:

foreach (Student student in students.ToArray()
    .Where(s => s.GetType() == typeof (Student)))
{
    Console.WriteLine("{0} {1}", student.FirstName, student.LastName);
}
foreach (Student student in studentsArrayList.ToArray()
    .Where(s => s.GetType() == typeof (Student)))
{
    Console.WriteLine("{0} {1}", student.FirstName, student.LastName);
}

正如其他人所指出的,如果所有对象的类型都是
Student
,那么您可以只使用
for
循环,而不使用强制转换,您应该使用
列表(或
数组列表
以外的任何对象)

如果出于某种原因,您在
studentsArrayList
中存储的对象类型不是
Student
,那么您可以通过执行以下操作来获取
Student
类型:

foreach (var someObject in students)
{
    // Try to cast the object as a Student
    var studentCast = someObject as Student;

    // If it's not null, the cast succeeded
    if (studentCast != null)
    {
        Console.WriteLine("{0} {1}", studentCast.FirstName, studentCast.LastName);
    }
}
foreach (var someObject in studentsArrayList)
{
    // Try to cast the object as a Student
    var studentCast = someObject as Student;

    // If it's not null, the cast succeeded
    if (studentCast != null)
    {
        Console.WriteLine("{0} {1}", studentCast.FirstName, studentCast.LastName);
    }
}
或使用Linq:

foreach (Student student in students.ToArray()
    .Where(s => s.GetType() == typeof (Student)))
{
    Console.WriteLine("{0} {1}", student.FirstName, student.LastName);
}
foreach (Student student in studentsArrayList.ToArray()
    .Where(s => s.GetType() == typeof (Student)))
{
    Console.WriteLine("{0} {1}", student.FirstName, student.LastName);
}

在将
for
循环转换为
foreach
之前,将
ArrayList
转换为
List
,不要在2015年使用
ArrayList
。嘿,我知道for循环更好,但我需要实现foreach循环。它的学术性。。。我检查了一下,但没法让它工作。应该没那么难。你试过什么吗?我试过foreach(studentarraylist中的int元素){Student currentStudent=(Student)studentarraylist[i];System.Console.WriteLine(“元素{0}:{1}”,currentStudent.FirstName,currentStudent.LastName);}将您尝试的代码添加到问题中。是的,但我需要将返回的对象从ArrayList强制转换为Student对象。。。喜欢Student currentStudent=(Student)studentarraylist[i];它是隐式的。@Aindriu:不,你没有。
foreach
已经在为您做这件事了
student
是一名
student
@Aindriu在发布问题之前,您应该先查看MSDN,这样,您通常会找到您的答案。@JoshL。它不像
那样是一个
。如果要获取
Student
的数组列表,然后向其中添加
newobject()
,然后尝试执行
foreach
循环,它将抛出异常,因为它无法将
对象
强制转换为
Student
。请参阅示例。只要列表只包含
Student
,您就可以使用
foreach(studentarrayList中的Student currentsudentent)
进行简化,以避免必须将ArrayList中的Student对象强制转换为Student对象?是的,您是对的。这会将元素投射到学生对象上。击败我+1对于Linq的使用。我想这是我一直在寻找的答案-我想确保它至少尝试投射对象(其学术问题)并使用foreach循环,所以谢谢@我相信其他人也提到过这一点,但我要明确的是,所有其他解决方案都试图铸造这个对象。如果对象不是
学生
,它们将抛出异常,就像您的for循环一样。
foreach (Student student in studentsArrayList.ToArray()
    .Where(s => s.GetType() == typeof (Student)))
{
    Console.WriteLine("{0} {1}", student.FirstName, student.LastName);
}