Вы получаете ошибку, потому что оператор возврата находится внутри цикла.Если список пуст, инструкция return никогда не будет выполнена.Кроме того, вы знаете результат только после завершения цикла.Поэтому поместите оператор return после цикла.
Поскольку целью этого метода является поиск самых высоких оценок, нет смысла передавать такой индекс в подпрограмму в качестве параметра.
Использовать foreach
проще, чем for
, потому что вам не нужно иметь дело с индексами.
Вместо того, чтобы возвращать массив, возвращайте безымянного студента, содержащего результаты.Вы можете удалить ненужные временные переменные.
public Student Calc_HighestMarkOutput()
{
var result = new Student(); // You also might have to add a default constructor.
foreach (Student student in myStudents) {
if (student.Maths_Result > result.Maths_Result) {
result.Maths_Result = student.Maths_Result;
}
if (student.English_Result > result.English_Result) {
result.English_Result = student.English_Result;
}
if (student.Maltese_Result > result.Maltese_Result) {
result.Maltese_Result = student.Maltese_Result;
}
}
return result;
}
Вы также можете использовать Math.Max
, чтобы упростить поиск максимального значения
foreach (Student student in myStudents) {
result.Maths_Result = Math.Max(result.Maths_Result, student.Maths_Result);
result.English_Result = Math.Max(result.English_Result, student.English_Result);
result.Maltese_Result = Math.Max(result.Maltese_Result, student.Maltese_Result);
}
При этих рефакторингах метод сокращается с 22 строк (несчитая пустые строки и строки, содержащие только фигурную скобку) до 7 строк.