問題:
有一個List<CourseList> testlist,類CourseList中有CourseId, CourseName,CourseStatus,TeacherName,LevelName,StudentNumber這五個屬性。現在想實現testlist的按CourseList類的各個屬性排序。
解決辦法:
定義各屬性的枚舉類型
public enum CompareType{ CourseId, CourseName, CourseStatus, TeacherName, LevelName, StudentNumber}
實現IComparer介面
public class CourseListComparer:IComparer<CourseList>{ private CompareType _compareColumn; public CompareType CompareColumn { get { return _compareColumn; } set { _compareColumn = value; } } public CourseListComparer(CompareType t) { this._compareColumn = t; } /// <summary> /// compare by different property /// </summary> /// <param name="x">CourseList x</param> /// <param name="y">CourseList y</param> /// <returns>int </returns> public int Compare(CourseList x,CourseList y) { switch (this.CompareColumn) { case CompareType.CourseId: return x.CourseId.CompareTo(y.CourseId); case CompareType.CourseName: return x.CourseName.CompareTo(y.CourseName); case CompareType.CourseStatus: return x.CourseStatus.CompareTo(y.CourseStatus); case CompareType.TeacherName: return x.TeacherName.CompareTo(y.TeacherName); case CompareType.LevelName: return x.LevelName.CompareTo(y.LevelName); case CompareType.StudentNumber: return x.StudentNumber.CompareTo(y.StudentNumber); default: return x.CourseId.CompareTo(y.CourseId); } }}調用sort方法
CourseListComparer courselistComparer = new CourseListComparer(CompareType.CourseId);testList.Sort(courselistComparer);
原因:
C#中的List<>有兩個Sort方法,一個是無參的,一個是帶IComparer參的。無參的方法是按預設的比較子進行排序,有參的就要自己定義一個實現IComparer介面。
實現ICompare介面就需要實現Compare方法。Compare方法有兩個要比較的輸入,根據自己定義的比較規則,返回int值,0表示相等,1表示x>y,-1表示x<y.