欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap FreeTalk
   您现在位于: 首页技术专栏开发语言 → 正文
如何使用C#中IComparer和IComparable接口
08-08-05 10:38:39 作者:邓石 出处:http://www.cnblogs.com/smartstone
本文介绍使用两个接口: IComparer 和 IComparable 。 同一项目中讨论这些接口有两个原因。 这些接口常用一起, 和虽然接口很相似 (并具有类似名称), 它们提供不同用途。

如果有数组类型 (如 字符串 或 整数 ) 已经支持 IComparer , 则不提供任何显式引用到 IComparer 可排序该数组。 数组的元素此时, 都转换为 IComparer ( Comparer.Default ) 的默认实现对。 但是, 如果要提供排序或比较功能对于您自定义对象, 必须实现任一或两个这些接口。

本文中引用 .NETFrameworkClassLibrary 下列命名空间:
System.Collections

IComparable

角色是 IComparable 是以提供方法来比较两个特定类型的对象。 这是必需如果要为您对象提供任何排序功能。 提供默认排序次序对您对象看作是 IComparable 。 例如, 如果有对象的您类型, 数组并调用该数组, 上 排序 方法 IComparable 提供对象比较期间排序。 当实现 IComparable 接口, 您必须实现 CompareTo 方法, 如下所示:
// Implement IComparable CompareTo method - provide default sort order.
int IComparable.CompareTo(object obj)
{
car c=(car)obj;
return String.Compare(this.make,c.make);
}
方法中比较是取决于正在进行比较, 值数据类型不同。 此示例中使用 String.Compare 因为属性是用于比较选择是字符串。

IComparer

角色的 IComparer 旨在提供其他比较机制。 例如, 您可能希望提供排序是按几个字段或属性, 类升序和降序对同一字段, 或两者

使用 IComparer 是一个两步过程。 首先, 声明类实现 IComparer , 并然后实现 Compare 方法:
private class sortYearAscendingHelper : IComparer
{
int IComparer.Compare(object a, object b)
{
car c1=(car)a;
car c2=(car)b;
if (c1.year > c2.year)
return 1;
if (c1.year < c2.year)
return -1;
else
return 0;
}
}
注意 IComparer.Compare 方法要求第三级比较。 1, 0 或 - 1 是返回根据一个值是大于、, 等于或小于另一个。 通过此方法中切换逻辑运算符更改排序次序 (升序或降序)。

第二步是要返回您 IComparer 对象的一个实例方法声明:
public static IComparer sortYearAscending()
{
return (IComparer) new sortYearAscendingHelper();
}
当调用重载 Array.Sort 方法接受 IComparer 在本示例, 对象用作第二个参数。
9 7 3 1 2 4 8 :

(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  
    无相关新闻

    关于我们友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
     
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.
     

                   滇ICP备05006901号