本頁(yè)
概要
<script type="text/javascript">loadTOCNode(1, 'summary');</script>如果有數(shù)組類型 (如 字符串 或 整數(shù) ) 已經(jīng)支持 IComparer , 則不提供任何顯式引用到 IComparer 可排序該數(shù)組。 數(shù)組的元素此時(shí), 都轉(zhuǎn)換為 IComparer ( Comparer.Default ) 的默認(rèn)實(shí)現(xiàn)對(duì)。 但是, 如果要提供排序或比較功能對(duì)于您自定義對(duì)象, 必須實(shí)現(xiàn)任一或兩個(gè)這些接口。
本文中引用 .NETFrameworkClassLibrary 下列命名空間:
IComparable
<script type="text/javascript">loadTOCNode(2, 'summary');</script> 角色是 IComparable 是以提供方法來(lái)比較兩個(gè)特定類型的對(duì)象。 這是必需如果要為您對(duì)象提供任何排序功能。 提供默認(rèn)排序次序?qū)δ鷮?duì)象看作是 IComparable 。 例如, 如果有對(duì)象的您類型, 數(shù)組并調(diào)用該數(shù)組, 上 排序 方法 IComparable 提供對(duì)象比較期間排序。 當(dāng)實(shí)現(xiàn) IComparable 接口, 您必須實(shí)現(xiàn) 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);
}
方法中比較是取決于正在進(jìn)行比較, 值數(shù)據(jù)類型不同。 此示例中使用 String.Compare 因?yàn)閷傩允怯糜诒容^選擇是字符串。
IComparer
<script type="text/javascript">loadTOCNode(2, 'summary');</script> 角色的 IComparer 旨在提供其他比較機(jī)制。 例如, 您可能希望提供排序是按幾個(gè)字段或?qū)傩? 類升序和降序?qū)ν蛔侄? 或兩者使用 IComparer 是一個(gè)兩步過(guò)程。 首先, 聲明類實(shí)現(xiàn) IComparer , 并然后實(shí)現(xiàn) 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 方法要求第三級(jí)比較。 1, 0 或 - 1 是返回根據(jù)一個(gè)值是大于、, 等于或小于另一個(gè)。 通過(guò)此方法中切換邏輯運(yùn)算符更改排序次序 (升序或降序)。
第二步是要返回您 IComparer 對(duì)象的一個(gè)實(shí)例方法聲明:
public static IComparer sortYearAscending()
{
return (IComparer) new sortYearAscendingHelper();
}
當(dāng)調(diào)用重載 Array.Sort 方法接受 IComparer 在本示例, 對(duì)象用作第二個(gè)參數(shù)。 使用 IComparer 不僅限于數(shù)組。 它被接受多種不同集合和控件類中以參數(shù)形式。
分步示例
<script type="text/javascript">loadTOCNode(2, 'summary');</script> 以下示例演示使用這些接口。 為了演示 IComparer 和 IComparable , 創(chuàng)建一個(gè)名為 汽車 類。 汽車 對(duì)象具有 使 和 年 屬性。 有關(guān)通過(guò) IComparable 接口, 啟用 使 字段和通過(guò) IComparer 接口啟用對(duì) 使 字段降序排序升序排序。 為通過(guò)使用的 IComparer 年 屬性提供了升序和降序排序。1. | Visual C#, 中新建控制臺(tái)應(yīng)用程序項(xiàng)目。 名稱 ConsoleEnum 應(yīng)用程序。 |
2. |
命名作為 Host.cs, Class, 然后用以下代碼替換代碼。
注意 重作為 Host.cs 入 Visual Studio 2005, 命名 Program.cs。
|
3. | 向項(xiàng)目添加類。 命名類 汽車 。 |
4. |
用下列替換代碼 Car.cs 中:
|
5. |
運(yùn)行項(xiàng)目。 以下輸出出現(xiàn)在控制臺(tái)窗口:
|
本文轉(zhuǎn)自: http://support.microsoft.com/kb/320727
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
