C# 常用比较接口:IComparable、IComparer<T>、IComparer

IComparable 接口含int CompareTo(object obj)方法

IComparable在 using System;命名空间

Array.Sort(array)排序方法:

Sort方法内部是数组 [ ] 实现的IComparable接口,并且重写的int CompareTo(object obj)方法

注:基本类型int\double\float \long 等都实现了IComparable接口的int CompareTo(object obj)方法

源码:

namespace System{
	//1.当前实例与同一个类型的另一对象进行比较
	//2.参数obj 进行比较的对象
	//3.返回值(int类型):
	//  值小于零---obj之前
	//  值等于零---等于obj
	//  值大于零---obj之后
	//4.异常:System.ArgumentExpection (比较的两个实例不是同一个类型)
	//当调用方法并且传递的自变量中至少有一个参数不符合所调用方法的参数规范
	
    public interface IComparable
	{
	   int CompareTo(object obj);
	}
}
public class Test
{
	public static void Main()
	{
        //初始化books元素
		Book[] books = new Book[3]
		{
			new Book(){Name="C#",Price = 80.6},
			new Book(){Name="C++",Price = 75.6},
			new Book(){Name="C",Price = 60.5}
		};
        //数组排序方法sort()
		Array.Sort(books);
        // 遍历books
		foreach(var i in books)
		{
		   Console.WriteLine(i.Name+"---"+i.Price);
		}
		Console.WriteLine("END");
	}
}

public class Book:IComparable
{
   public string Name{get;set;}
   public double Price{get;set;}
   public int CompareTo(object obj)
   {
      //类型转换
      Book parameter = obj as Book;
      //和上面的CompareTo方法不同,这个是double类型的。
      return  this.Price.CompareTo(parameter.Price);
   }
}

运行结果:

C---60.5
C++---75.6
C#---80.6
END

---------------------------------------------------------------------------------------------------------------------------------

IComparer<T> 含  int Compare(object obj1 object obj2)方法

IComparer<T>在 using System.Collections.Generic; 命名空间。

Array.Sort(array,new BookComparer()) 排序方法:

using System;
using System.Collections.Generic;

public class Test
{
	public static void Main()
	{
		Book[] books = new Book[3]
		{
			new Book(){Name="C#",Price = 80.6},
			new Book(){Name="C++",Price = 75.6},
			new Book(){Name="C",Price = 60.5}
		};
		Array.Sort(books,new BookComparer());
		foreach(var i in books)
		{
		   Console.WriteLine(i.Name+"---"+i.Price);
		}
		Console.WriteLine("END");
	}
}

public class Book
{
   public string Name{get;set;}
   public double Price{get;set;}

}

public class BookComparer:IComparer<Book>
{
    public int Compare(Book bNum1,Book bNum2)
    {
       return bNum1.Price.CompareTo(bNum2.Price);
    }
}

运行结果:

C---60.5
C++---75.6
C#---80.6
END

------------------------------------------------------------------------------------------------------------------

IComparer 含  int Compare(object obj1 object obj2)方法

IComparer在 using System.Collections; 命名空间。

Array.Sort(array,new PriceComparer()) 排序方法:

using System;
using System.Collections;

public class Test
{
	public static void Main()
	{
		Book[] books = new Book[3]
		{
			new Book(){Name="C#",Price = 80.6},
			new Book(){Name="C++",Price = 75.6},
			new Book(){Name="C",Price = 60.5}
		};
		Array.Sort(books,new PriceComparer());
		foreach(var i in books)
		{
		   Console.WriteLine(i.Name+"---"+i.Price);
		}
		Console.WriteLine("END");
	}
}

public class Book
{
   public string Name{get;set;}
   public double Price{get;set;}

}

public class PriceComparer : IComparer
{
    public int Compare(object obj1, object obj2)
    {
        Book Book1 = obj1 as Book;
        Book Book2 = obj2 as Book;
        if (Book1 == null || Book2 == null)
        {
            throw new ArgumentException("类型错误");
        }
        return Book1.Price.CompareTo(Book2.Price);
    }
}

运行结果:

C---60.5
C++---75.6
C#---80.6
END

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值