此主题尚未评级 - 评价此主题

IComparable 接口

2013/12/13

定义一种特定于类型的通用比较方法,值类型或类通过实现此方法对其实例进行排序。

Namespace:  System
程序集:  mscorlib(位于 mscorlib.dll 中)
public interface IComparable

IComparable 类型公开以下成员。

  名称说明
公共方法CompareTo将当前实例与同一类型的另一个对象进行比较,并返回一个整数,该整数指示当前实例在排序顺序中的位置是位于另一个对象之前、之后还是与其位置相同。
返回顶部

此接口由具有可排序值的类型实现。它要求实现类型定义单个方法 CompareTo,该方法指示当前实例在排序顺序中的位置是位于同一类型的另一个对象之前、之后还是与其位置相同。实例的 IComparable 实现由诸如 Array.Sort 这样的方法自动调用。

所有数值类型(如 Int32Double)均实现 IComparable,这一点与 StringCharDateTime 是相同的。此外,自定义类型还应提供自己的 IComparable 实现,以便可以对对象实例进行排序。

下面的代码示例说明 IComparable 的实现,以及必需的 CompareTo 方法。


using System;
using System.Collections;

public class Temperature : IComparable
{
   // The temperature value
   protected double temperatureF;

   public int CompareTo(object obj)
   {
      if (obj == null) return 1;

      Temperature otherTemperature = obj as Temperature;
      if (otherTemperature != null)
         return this.temperatureF.CompareTo(otherTemperature.temperatureF);
      else
         throw new ArgumentException("Object is not a Temperature");
   }

   public double Fahrenheit
   {
      get
      {
         return this.temperatureF;
      }
      set
      {
         this.temperatureF = value;
      }
   }

   public double Celsius
   {
      get
      {
         return (this.temperatureF - 32) * (5.0 / 9);
      }
      set
      {
         this.temperatureF = (value * 9.0 / 5) + 32;
      }
   }
}

public class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      Temperature[] temperatures = new Temperature[10];
      // Initialize random number generator.
      Random rnd = new Random();

      // Generate 10 temperatures between 0 and 100 randomly.
      for (int ctr = 1; ctr <= 10; ctr++)
      {
         int degrees = rnd.Next(0, 100);
         Temperature temp = new Temperature();
         temp.Fahrenheit = degrees;
         temperatures[ctr - 1] = temp;
      }

      // Sort ArrayList.
      Array.Sort(temperatures);

      foreach (Temperature temp in temperatures)
         outputBlock.Text += temp.Fahrenheit + "\n";

   }
}
// The example displays the following output (individual
// values may vary because they are randomly generated):
//       2
//       7
//       16
//       17
//       31
//       37
//       58
//       66
//       72
//       95


Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

本文是否对您有所帮助?
(1500 个剩余字符)
感谢您的反馈
显示:
© 2014 Microsoft. 版权所有。