C# の同じオブジェクト型で 4 つの異なる属性を使用して並べ替えを実装する必要があります。
オブジェクト Student に名前、ID、生年月日、学年があるとしましょう。それぞれをソートするためにコードを再利用するにはどうすればよいですか。名前でソートできましたが、コードを再利用するにはどうすればよいですか?
private void btnSortName_Click(object sender, EventArgs e)
{
Student obj = new Student();
List<Student> listOfStudents = obj.List();
int student_count = listOfStudents.Count();
int first_index, last_index;
for (first_index = 1; first_index < student_count; first_index++)
{
last_index = first_index - 1;
Student first = listOfStudents[first_index];
Student last = listOfStudents[last_index];
while (last_index >= 0 && DateTime.Compare(last.RDate, first.RDate) > 0)
{
listOfStudents[last_index + 1] = listOfStudents[last_index];
last_index = last_index - 1;
}
listOfStudents[last_index + 1] = first;
}
DataTable dt = Utility.ConvertToDataTable(listOfStudents);
dataGridStudents.DataSource = dt;
btnSortName.Visible = false;
btnSortName.Enabled = false;
btnSortNameD.Visible = true;
btnSortNameD.Enabled = true;
}
挿入ソートのメソッドを作成し、属性をパラメーターとして渡し、そのオブジェクトのリストを返すことでこれを実行しようとしましたが、これらは両方ともエラーを示しています:
public List<Student> insertion_Sort(ref String data, Boolean asc)
{
Student obj = new Student();
List<Student> listOfStudents = obj.List();
int student_count = listOfStudents.Count();
int first_index, last_index;
for (first_index = 1; first_index < student_count; first_index++)
{
last_index = first_index - 1;
Student first = listOfStudents[first_index];
Student last = listOfStudents[last_index];
if (asc){
while (last_index >= 0 && DateTime.Compare(last.data, first.data) > 0)
{
listOfStudents[last_index + 1] = listOfStudents[last_index];
last_index = last_index - 1;
}
listOfStudents[last_index + 1] = first;
}
else
{
while (last_index >= 0 && DateTime.Compare(last.data, first.data) < 0)
{
listOfStudents[last_index + 1] = listOfStudents[last_index];
last_index = last_index - 1;
}
listOfStudents[last_index + 1] = first;
}
}
return listOfStudents;
}
これらの問題を解決するにはどうすればよいですか?