# OrderBy 使用自訂排序 Compare,Compare 的建立方法 ###### tags: `C#` ``` public static void Main() { var allDayOfWeek = Enum.GetValues(typeof(DayOfWeek)).Cast<int>(); var query2 = allDayOfWeek.OrderBy(i => i); Console.WriteLine("預設排序結果: " + string.Join(",", query2) + "\r\n"); SundayAlwaysOnLast comparer2 = new SundayAlwaysOnLast(); query2 = allDayOfWeek.OrderBy(i => i, comparer2); Console.WriteLine("\r\n自訂排新結果: " + string.Join(",", query2)); } public class SundayAlwaysOnLast : IComparer<int> { // Compare // 小於零 = x 小於 y // 零 = x 等於 y // 大於零 = x 大於 y public int Compare(int s1, int s2) { // 等於不動 if (s1.Equals(s2)) return 0; // 如果 Sunday 作為比較值時,皆回傳 1,表示 Sunday 比較大 if (0.Equals(s1)) return 1; // 如果 Sunday 作為被比較時,皆回傳 -1,表示 Sunday 比較大 // Ex. Monday 跟 Sunday 比,回傳 -1 表示小於零,於是 Monday 小於 Sunday if (0.Equals(s2)) { Console.WriteLine("sunday equal s2: " + s1 + ", " + s2 + " = -1"); return -1; } // 其他排序照舊,不做任何處理 // CompareTo 執行區分文化特性和區分大小寫的比較。 您無法使用這個方法來執行不區分文化特性或序數比較。 // 小於零 = 這個執行個體位於 value 之前。 // 零 = 這個執行個體在排序次序中的位置與 value 相同。 // 大於零 = 這個執行個體位於 value 之後 or value 為 null。 Console.WriteLine("compare: " + s1 + " , " + s2 + " = " + s1.CompareTo(s2)); return s1.CompareTo(s2); } } ```  <iframe width="100%" height="700" src="https://dotnetfiddle.net/Widget/vW5WFZ" frameborder="0"></iframe>
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up