2015-04-27 90 views
-4

我有一個for循環工作,但我需要實現一個foreach循環。如何更改爲foreach循環?C#轉換for循環爲每個(arraylist)

這裏是循環現有工作中的方法

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); 
    } 
} 

編輯

我需要從ArrayList中投返回的對象像上面的一個Student對象。

+4

將'for'循環轉換爲'foreach'之前,將'ArrayList'轉換爲'List ',不要在2015年使用'ArrayList'。 – Habib

+0

嘿,我知道循環更好,但我需要實現一個foreach循環。它的學術...我檢查https://msdn.microsoft.com/en-us/library/ttw7t8t6.aspx,但無法讓它工作 – Aindriu

+2

它應該不那麼難。你有嘗試過什麼嗎? –

回答

2

正如其他人所指出的,如果所有對象的類型都是Student,那麼只需使用for循環就可以不投射,並且您應該使用List(或除ArrayList以外的任何東西)。

如果由於某種原因你是存儲在您的studentsArrayListStudent其他類型的對象,那麼你可以做這樣的事情得到公正的Student類型:

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 studentsArrayList.ToArray() 
    .Where(s => s.GetType() == typeof (Student))) 
{ 
    Console.WriteLine("{0} {1}", student.FirstName, student.LastName); 
} 
+1

打敗了我。 +1使用Linq。 – Shar1er80

+0

我認爲這是我正在尋找的答案 - 我想確保它至少試圖投射對象(其學術問題)並使用foreach循環,所以謝謝! – Aindriu

+0

@Aindriu我相信其他人已經提到過,但只是要清楚所有其他解決方案確實試圖拋出該對象。如果對象不是「Student」,它們將拋出異常,就像您的for循環示例一樣。 –

4

你應該始終保持試圖找出這類初級的問題,但這裏的回答你的問題:

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

是的,但我需要將返回的對象從ArrayList轉換爲Student對象...例如Student currentStudent =(Student)studentarraylist [i]; – Aindriu

+0

它是隱式投射。 –

+0

@Aindriu:不,你沒有。 「foreach」已經在爲你做。 '學生'是'學生'。 –

1
foreach(var element in studentarraylist){ 
    var currentStudent = (Student) element; 
    Console.WriteLine("Student {0} {1}", currentStudent.FirstName, currentStudent.LastName); 
} 
+0

只要list * only *包含'Student',就可以用'foreach(studentarrayList in studentarrayList)'來簡化,以避免必須投入 –

+1

爲「var currentStudent =(Student)element」在ArrayList中投射學生對象學生對象? – Aindriu

+1

是的,你是對的。這會將元素投射到學生對象。 –

2
foreach (Student student in studentarraylist) 
{ 
    Console.Writeline("Student {0} {1}", student.FirstName, student.LastName); 
} 

這正是什麼here

我需要將返回的對象從ArrayList轉換爲Student對象,如上面的

使用foreach循環的整點,因此您不必強制轉換對象,或者更準確的你在那裏說

foreach (Student student in studentarraylist //here) 
1
foreach(Student student in studentarraylist) 
{ 
    Console.WriteLine("Student {0} {1}", student.FirstName, student.LastName); 
} 
1

此作品一部分做只有每個對象都是學生。它會嘗試將每個元素投射給學生。這很好,如果這不是你的問題。

foreach(Student currentStudent in studentarraylist) 
{ 
    Console.WriteLine("Student {0} {1}", currentStudent.FirstName, currentStudent.LastName); 
} 

更好的方法將被刪除ArrayList完全,而是使用一個List<Student>

var studentsList = new List<Student>(); 
studentsList.Add(new Student { FirstName = "Aaron", LastName = "Rodgers" }); 

foreach (var student in studentsList) 
{ 
    Console.WriteLine("Student {0} {1}", student.FirstName, student.LastName); 
} 

還有一個列表,你可以使用一些LINQ,如果這是你的東西。

studentsList.ForEach(student => 
    Console.WriteLine("Student {0} {1}", student.FirstName, student.LastName)); 
1

正如其他人所指出的,如果所有的對象都是Student型的,那麼你可以使用for循環,不打石膏,你應該考慮使用List(比ArrayList其他什麼的)來代替。

如果由於某種原因你是存儲在您的studentsArrayListStudent其他類型的對象,那麼你可以做這樣的事情得到公正的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); 
    } 
} 

或者使用LINQ:

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