自訂類別實作 IComparable 介面以執行排序
C# 物件導向設計基礎:自訂物件排序功能。
實值型別,如 int、char 內定可以自行排序,但是自訂類別若不實作 IComparable 介面,則無法排序。範例如下:
自訂類別 User:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ComparePractice
{
class User:IComparable<User>
{
public string name { get; set; }
public int age { get; set; }
#region IComparable<User> Members
public int CompareTo(User other)
{
//return age - other.age;
return name.CompareTo(other.name);
}
#endregion
}
}
要注意 CompareTo 要回傳的是 int,所以以 User 類別來看,可以簡單的用 age 相減;若是要用 name 來排序,因為 Net framework 的 String 本身就有實作 CompareTo 方法,所以直接調用 String.CompareTo 就行了。
用 Console 專案測試:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ComparePractice
{
internal class Program
{
private static void Main(string[] args)
{
List<User> users = new List<User>();
users.Add(new User { name = "Ming", age = 50 });
users.Add(new User { name = "Wang", age = 35 });
users.Add(new User { name = "Ben", age = 30 });
users.Add(new User { name = "Kevin", age = 48 });
users.Sort();
foreach (User item in users) {
Console.WriteLine(item.name + ", age = " + item.age);
//Ben, age = 30
//Kevin, age = 48
//Ming, age = 50
//Wang, age = 35
}
}
}
}
--------
沒什麼特別的~
不過是一些筆記而已