varsectionFilter="type!='notice'&&type!='securedata'&&type!='querywords'";vartocArrow="/library/images/support/kbgraphics/public/en-us/downarrow.gif";vardepthLimit=10;varde" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

如何使用 Visual C# 中和 IComparer IComparabl

系統 2177 0
<script type="text/javascript"> var sectionFilter = "type != 'notice' && type != 'securedata' && type != 'querywords'"; var tocArrow = "/library/images/support/kbgraphics/public/en-us/downarrow.gif"; var depthLimit = 10; var depth3Limit = 10; var depth4Limit = 5; var depth5Limit = 3; var tocEntryMinimum = 1; </script> <script src="/common/script/gsfx/kbtoc.js?11" type="text/javascript"></script> <noscript></noscript>

概要

<script type="text/javascript">loadTOCNode(1, 'summary');</script>
本文介紹使用兩個接口: IComparer 和 IComparable 。 同一項目中討論這些接口有兩個原因。 這些接口常用一起, 和雖然接口很相似 (并具有類似名稱), 它們提供不同用途。

如果有數組類型 (如 字符串 或 整數 ) 已經支持 IComparer , 則不提供任何顯式引用到 IComparer 可排序該數組。 數組的元素此時, 都轉換為 IComparer ( Comparer.Default ) 的默認實現對。 但是, 如果要提供排序或比較功能對于您自定義對象, 必須實現任一或兩個這些接口。

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

回到頂端

IComparable

<script type="text/javascript">loadTOCNode(2, 'summary');</script> 角色是 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

<script type="text/javascript">loadTOCNode(2, 'summary');</script> 角色的 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 在本示例, 對象用作第二個參數。 使用 IComparer 不僅限于數組。 它被接受多種不同集合和控件類中以參數形式。

回到頂端

分步示例

<script type="text/javascript">loadTOCNode(2, 'summary');</script> 以下示例演示使用這些接口。 為了演示 IComparer 和 IComparable , 創建一個名為 汽車 類。 汽車 對象具有 使 和 年 屬性。 有關通過 IComparable 接口, 啟用 使 字段和通過 IComparer 接口啟用對 使 字段降序排序升序排序。 為通過使用的 IComparer 年 屬性提供了升序和降序排序。
1. Visual C#, 中新建控制臺應用程序項目。 名稱 ConsoleEnum 應用程序。
2. 命名作為 Host.cs, Class, 然后用以下代碼替換代碼。

注意 重作為 Host.cs 入 Visual Studio 2005, 命名 Program.cs。
                  using System;

namespace ConsoleEnum
{
   class host
   {
      [STAThread]
      static void Main(string[] args)
      {
         // Create an arary of car objects.      
         car[] arrayOfCars= new car[6]
         {
            new car("Ford",1992),
            new car("Fiat",1988),
            new car("Buick",1932),
            new car("Ford",1932),
            new car("Dodge",1999),
            new car("Honda",1977)
         };
      
         // Write out a header for the output.
         Console.WriteLine("Array - Unsorted\n");

         foreach(car c in arrayOfCars)
            Console.WriteLine(c.Make + "\t\t" + c.Year);
      
         // Demo IComparable by sorting array with "default" sort order.
         Array.Sort(arrayOfCars);
         Console.WriteLine("\nArray - Sorted by Make (Ascending - IComparable)\n");

         foreach(car c in arrayOfCars)
            Console.WriteLine(c.Make + "\t\t" + c.Year);

         // Demo ascending sort of numeric value with IComparer.
         Array.Sort(arrayOfCars,car.sortYearAscending());
         Console.WriteLine("\nArray - Sorted by Year (Ascending - IComparer)\n");

         foreach(car c in arrayOfCars)
            Console.WriteLine(c.Make + "\t\t" + c.Year);

         // Demo descending sort of string value with IComparer.
         Array.Sort(arrayOfCars,car.sortMakeDescending());
         Console.WriteLine("\nArray - Sorted by Make (Descending - IComparer)\n");

         foreach(car c in arrayOfCars)
            Console.WriteLine(c.Make + "\t\t" + c.Year);

         // Demo descending sort of numeric value using IComparer.
         Array.Sort(arrayOfCars,car.sortYearDescending());
         Console.WriteLine("\nArray - Sorted by Year (Descending - IComparer)\n");

         foreach(car c in arrayOfCars)
            Console.WriteLine(c.Make + "\t\t" + c.Year);
     
         Console.ReadLine();
      }
   }
}
					
                
3. 向項目添加類。 命名類 汽車 。
4. 用下列替換代碼 Car.cs 中:
                  using System;
using System.Collections;
namespace ConsoleEnum
{   
   public class car : IComparable
   {      
      // Beginning of nested classes.

      // Nested class to do ascending sort on year property.
      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;
         }
      }

      // Nested class to do descending sort on year property.
      private class sortYearDescendingHelper: 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;
         }
      }

      // Nested class to do descending sort on make property.
      private class sortMakeDescendingHelper: IComparer
      {
         int IComparer.Compare(object a, object b)
         {
            car c1=(car)a;
            car c2=(car)b;
             return String.Compare(c2.make,c1.make);
         }
      }

      // End of nested classes.

      private int year;
      private string make;
        
      public car(string Make,int Year)
      {
         make=Make;
         year=Year;
      }

      public int Year
      {
         get  {return year;}
         set {year=value;}
      }

      public string Make
      {
         get {return make;}
         set {make=value;}
      }

      // Implement IComparable CompareTo to provide default sort order.
      int IComparable.CompareTo(object obj)
      {
         car c=(car)obj;
         return String.Compare(this.make,c.make);
      }

      // Method to return IComparer object for sort helper.
      public static IComparer sortYearAscending()
      {      
         return (IComparer) new sortYearAscendingHelper();
      }

      // Method to return IComparer object for sort helper.
      public static IComparer sortYearDescending()
      {      
         return (IComparer) new sortYearDescendingHelper();
      }

      // Method to return IComparer object for sort helper.
      public static IComparer sortMakeDescending()
      {      
        return (IComparer) new sortMakeDescendingHelper();
      }

   }
}
					
                
5. 運行項目。 以下輸出出現在控制臺窗口:
                  Array - Unsorted

Ford            1992
Fiat            1988
Buick           1932
Ford            1932
Dodge           1999
Honda           1977

Array - Sorted by Make (Ascending - IComparable)

Buick           1932
Dodge           1999
Fiat            1988
Ford            1932
Ford            1992
Honda           1977

Array - Sorted by Year (Ascending - IComparer)

Ford            1932
Buick           1932
Honda           1977
Fiat            1988
Ford            1992
Dodge           1999

Array - Sorted by Make (Descending - IComparer)

Honda           1977
Ford            1932
Ford            1992
Fiat            1988
Dodge           1999
Buick           1932

Array - Sorted by Year (Descending - IComparer)

Dodge           1999
Ford            1992
Fiat            1988
Honda           1977
Buick           1932
Ford            1932
					
                

回到頂端

本文轉自: http://support.microsoft.com/kb/320727

如何使用 Visual C# 中和 IComparer IComparable 接口


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲高清在线视频 | 久久福利青草精品资源 | 一级毛片特级毛片免费的 | 最新中文字幕日本 | 奇米影视8888狠狠狠狠 | 欧美午夜艳片欧美精品 | 一级午夜a毛片免费视频 | 青青草原综合网 | 韩国精品一区 | 欧美久草 | 午夜一区二区三区 | 国产精品美女久久久久久 | 中文字幕一区二区三 | 精品三级在线 | 日本一级成人毛片免费观看 | 天天射天天操天天干 | 国产永久在线视频 | 午夜性刺激在线观看视频 | 欧美久在线观看在线观看 | 成人国产精品一区 | 久久综合玖玖爱中文字幕 | 成人国产免费观看 | 日韩av线 | 天天久| 久草在线观看首页 | 国产精品二区三区 | 韩国精品 | 狠狠久久 | 欧美成人h版在线观看 | 国产在线精品一区二区高清不卡 | 成人在线视频在线观看 | 日本中文字幕一区二区有码在线 | 天天操天天摸天天舔 | 日韩色区 | 亚洲精品国产成人 | www.99xxxx.com | 超碰97av 在线人人操 | 亚洲午夜在线播放 | 在线观看亚洲专区 | 久草福利在线观看 | 三级网站免费观看 |