信息
您所需的主题如下所示。但此主题未包含在此库中。

IComparable<T> 接口

2013/12/13

定义由值类型或类实现的通用的比较方法,以为排序实例创建类型特定的比较方法。

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

public interface IComparable<in T>

类型参数

in T

要比较的对象的类型。

该类型参数是逆变的。即可以使用指定的类型或派生程度更低的类型。 有关协变和逆变的更多信息,请参阅[2678dc63-c7f9-4590-9ddc-0a4df684d42e]

IComparable<T> 类型公开以下成员。

  名称说明
公共方法CompareTo比较当前对象和同一类型的另一对象。
返回顶部

此接口由值可以排序的类型实现;例如数值或字符串类。值类型或类实现 CompareTo 方法以创建适合排序等目的的类型特定的比较方法。

说明注意:

IComparable<T> 接口定义 CompareTo 方法,该方法确定实现类型的实例的排序顺序。IEquatable<T> 接口定义 Equals 方法,该方法确定实现类型的实例的相等性。

IComparable<T> 接口提供强类型的比较方法,以排序泛型集合对象的成员。因此,通常不从开发人员代码直接调用该方法。而是由诸如 List<T>.Sort() 这样的排序方法自动调用它。

对实现者的说明

用实现此接口的类型替换 IComparable<T> 接口的类型参数。

下面的代码示例演示一个简单的 Temperature 对象的 IComparable 实现。


using System;
using System.Collections.Generic;

public class Address : IComparable<Address>
{
   private string addr1, addr2, cty, st, coun, postal;

   public Address(string address1, string address2, string city, 
                  string state, string postalCode, string country)
   {                  
      this.addr1 = address1;
      this.addr2 = address2;
      this.cty = city;
      this.st = state;
      this.coun = country;
      this.postal = postalCode;      
   }

   public string Address1
   {
      get { return this.addr1; }
      set { this.addr1 = value; }
   }

   public string Address2
   {
      get {return this.addr2; }
      set { this.addr2 = value; }
   }

   public string City
   {
      get { return this.cty; }
      set { this.cty = value; }
   }

   public string State
   {
      get { return this.st; }
      set { this.st = value; }
   }

   public string Country
   {
      get { return this.coun; }
      set { this.coun = value; }
   }

   public string PostalCode
   {
      get {return this.postal; }
      set {this.postal = value; }
   }

   public override string ToString()
   {
      string addressLine2 = string.IsNullOrEmpty(addr2) ? "" : addr2 + "\n";
      return addr1 + "\n" + addressLine2 +              
             cty + ", " + st + " " + postal + " " + coun;
   }

   public int CompareTo(Address other)
   {
      // If other is null, this instance is greater.
      if (other == null) return 1;

      string otherAddress = other.Country + other.State + other.PostalCode +
                                   other.City + other.Address1 + other.Address2;
      return (coun + st + postal + cty + addr1 + addr2).CompareTo(otherAddress);
   }
}

public class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      List<Address> addresses = new List<Address>();
      addresses.Add(new Address("106 East 5th St.", "", "New City", "MI", "48002", "USA"));
      addresses.Add(new Address("47 East End Rd.", "", "Huxenplux", "NJ", "20203", "USA"));
      addresses.Add(new Address("12043 N.E. 72nd St.", "", "Belleville", "WA", "98101", "USA"));
      addresses.Sort();
      foreach (Address address in addresses)
         outputBlock.Text += address.ToString() + "\n\n";

   }
}


Windows Phone OS

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

Windows Phone

显示: