自訂類別實作 IComparable 介面以執行排序

  • 2552
  • 0

自訂類別實作 IComparable 介面以執行排序

Dotblogs 的標籤: ,

 

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
      }
    }
  }
}

--------
沒什麼特別的~
不過是一些筆記而已