一、方法概述
自定義比較器需要實現接口IComparer<T>
二、示例過程
1、新建一個Product產品類
/// <summary> /// 產品類 /// </summary> public class Product { /// <summary> /// 名稱 /// </summary> public string Name { get; set; } /// <summary> /// 價格 /// </summary> public Double Price { get; set; } /// <summary> /// 編號 /// </summary> public int Num { get; set; } }
2、新建一個Product對象並賦值
List<Product> products = new List<Product>(); products.Add(new Product() { Name = "pro1", Price = 2.4, Num = 6 }); products.Add(new Product() { Name = "pro2", Price = 4.6, Num = 3 }); products.Add(new Product() { Name = "pro3", Price = 1.8, Num = 5 }); products.Add(new Product() { Name = "pro4", Price = 25.2, Num = 1 });
3、創建比較器
(1) 產品價格比較器:
/// <summary> /// 產品價格比較器 /// </summary> public class ProductPriceComparer : IComparer<Product> { public int Compare(Product x,Product y) { if (x == null && y == null) return 0; if (x == null) return -1; if (y == null) return 1; var diff = x.Price - y.Price; if (diff > 0) return 1; if (diff < 0) return -1; return 0; } }
(2) 產品名稱比較器:
/// <summary> /// 產品名稱比較器 /// </summary> public class ProductNameComparer : IComparer<Product> { public int Compare(Product x,Product y) { if (x == null && y == null) return 0; if (x == null) return -1; if (y == null) return 1; return x.Name.CompareTo(y.Name); } }
(3) 產品編號比較器:
/// <summary> /// 產品編號比較器 /// </summary> public class ProductNumComparer : IComparer<Product> { public int Compare(Product x, Product y) { if (x == null && y == null) return 0; if (x == null) return -1; if (y == null) return 1; return x.Num-y.Num; } }
4、打印輸出結果的方法
/// <summary> /// 打印結果 /// </summary> /// <param name="products"></param> public static void PrintResult(List<Product> products) { Console.WriteLine("開始打印"); foreach (var product in products) { Console.WriteLine($"name:{product.Name},price:{product.Price},num:{product.Num}"); } Console.WriteLine("打印完畢"); Console.WriteLine("----------分割線----------------------"); }
5、通過比較器排序並打印出結果
products.Sort(new ProductNameComparer()); Console.WriteLine("根據名稱排序:"); PrintResult(products); products.Sort(new ProductNumComparer()); Console.WriteLine("根據編號排序:"); PrintResult(products); products.Sort(new ProductPriceComparer()); Console.WriteLine("根據價格排序:"); PrintResult(products);
6、輸出結果