自訂class 怎麼比大小
首先 先來自訂class
void Main()
{
var list = new List<Student>()
{
new Student{Name="A",Age=34},
new Student{Name="B",Age=30},
new Student{Name="C",Age=10},
};
list.Sort();
list.Dump();
}
class Student
{
public string Name { get; set; }
public int Age { get; set; }
}
可以看到出例外了 因為沒有說怎麼比大小
實做 IComparable<T>
void Main()
{
var list = new List<Student>()
{
new Student{Name="A",Age=34},
new Student{Name="B",Age=30},
new Student{Name="C",Age=10},
};
list.Sort();
list.Dump();
}
class Student : IComparable<Student>
{
public string Name { get; set; }
public int Age { get; set; }
public int CompareTo(Student student)
{
if (Age > student.Age)
{
return 1;
}
if (Age < student.Age)
{
return -1;
}
return 0;
}
}
.net 比較大小有用大於0 小於0 等於0
所以得到 由小到大排序
那如果要大到小呢
另一種方法實做IComparer<Student>
void Main()
{
var list = new List<Student>()
{
new Student{Name="A",Age=34},
new Student{Name="B",Age=30},
new Student{Name="C",Age=10},
};
list.Sort(new StudentComparer());
list.Dump();
}
class StudentComparer : IComparer<Student>
{
public int Compare(Student x, Student y)
{
if (y.Age > x.Age)
{
return 1;
}
if (y.Age < x.Age)
{
return -1;
}
return 0;
}
}
這樣就可以大到小排序
重點就是去控制 回傳 1 或 -1
雖然簡單的排序 用LINQ OrderBy 就可以處理 但是遇到複雜需求時
還是知道一下 IComparable , IComparer 比較踏實