一、方法概述
自定义比较器需要实现接口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.Addnew Product) { Name = "pro1", Price = 2.4, Num = 6 }); products.Addnew Product) { Name = "pro2", Price = 4.6, Num = 3 }); products.Addnew Product) { Name = "pro3", Price = 1.8, Num = 5 }); products.Addnew Product) { Name = "pro4", Price = 25.2, Num = 1 });
3、创建比较器
1) 产品价格比较器:
/// <summary> /// 产品价格比较器 /// </summary> public class ProductPriceComparer : IComparer<Product> { public int CompareProduct 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 CompareProduct x,Product y) { if x == null && y == null) return 0; if x == null) return -1; if y == null) return 1; return x.Name.CompareToy.Name); } }
3) 产品编号比较器:
/// <summary> /// 产品编号比较器 /// </summary> public class ProductNumComparer : IComparer<Product> { public int CompareProduct 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 PrintResultList<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.Sortnew ProductNameComparer)); Console.WriteLine"根据名称排序:"); PrintResultproducts); products.Sortnew ProductNumComparer)); Console.WriteLine"根据编号排序:"); PrintResultproducts); products.Sortnew ProductPriceComparer)); Console.WriteLine"根据价格排序:"); PrintResultproducts);
6、输出结果