c# 比较:IComparable和IComparer接口是.net中比较对象的标准方式

IComparable和iComparer接口是.net中比较对象的标准方式。
区别如下:
◆IComparable在要比较的对象的类中实现,可以比较该对象和另一个对象;
◆IComparer在一个单独的类中实现,可以比较任意两个对象。

一般情况下,使用IComparable给出类的默认比较代码,使用其他类给出非默认的比较代码。
IComparable提供了一个方法CompareTo()。这个方法接受一个对象。返回一个int。例如:

<br/><br/>if (person1.CompareTo(person2)==0)<br/>{<br/>     Console.WriteLine("年龄相同");<br/>}<br/>else if(person1.CompareTo(person2)>0)<br/>{<br/>    Console.WriteLine("person1比较大");<br/>}<br/>else<br/>{<br/>   Console.WriteLine("Person1比较年轻");<br/>}<br/><br/>



IComparer也提供了一个方法Compare()。这个方法接受两个对象,返回一个整形结果,这与CompareTo()相同。对于支持ICompare的对象,可以使用下面的代码:

<br/><br/>if (personComparer.Comparer(person1,person2)==0)<br/>{<br/>     Console.WriteLine("年龄相同");<br/>}<br/>else if (personComparer.Comparer(person1,person2)>0)<br/>{<br/>     Console.WriteLine("person1年龄大");<br/>}<br/>else <br/>{<br/>     Console.WriteLine("person1年龄小");<br/>}<br/><br/>



.net Framework在类Comparer上提供了IComparer接口的默认实现方式,类Comparer位于System.Collections命名空间中,可以对简单类型以及支持IComparable接口的认识类型进行特定文化的比较。例如,可以通过下面的代码使用它:

<br/>string fristString ="Frist string";<br/>string secondString="Second string";<br/>Console.WriteLine("Comparing'{0}' and '{1}', result:{2}",fristString,secondString,Comparer.Default.Compare(fristString,secondString));<br/><br/>int fristNumber=35;<br/>int secondString=23;<br/>Console.WriteLine("Comparing '{0}'  and '{1}' ,result:{2} ",fristNumber,secondString,Compare.Default.Compare(fristNumber,secondString));<br/>



这里使用Comparer.Default静态成员获取Comparer类的一个实例,接着使用Comparer()方法比较前两个字符串,之后比较两个整数,结果如下:

<br/>Comparing 'Frist String' and 'Second String' , resulr:-1;<br/><br/>Comparing '35' and '23' , resulr:1;<br/>


注意:这里的结构并未给出相差的幅度。
在使用Comparer时,必须使用可以比较的类型。例如,上面如果要比较fristString 和fristNumber就会生成一个异常。

0 条留言

我要留言
(必填)
(必填,绝不公开)