一、方法概述
自定义比较器需要实现接口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、输出结果