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

IComparable<T>.CompareTo 方法

2013/12/13

比较当前对象和同一类型的另一对象。

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

int CompareTo(
	T other
)

参数

other
类型: T
与此对象进行比较的对象。

返回值

类型: System.Int32
一个 32 位有符号整数,指示要比较的对象的相对顺序。返回值的含义如下:

含义

小于零

此对象小于 other 参数。

此对象等于 other

大于零

此对象大于 other

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

此方法只是一个定义,必须由特定的类或值类型实现才能生效。“小于”、“等于”和“大于”这几种比较的含义取决于具体的实现。

根据定义,任何对象与 null 相比较都要大,两个 null 引用的比较结果为彼此相等。

对实现者的说明

对于对象 A、B 和 C,以下条件必须为真:

A.CompareTo(A) 必须返回零。

如果 A.CompareTo(B) 返回零,则 B.CompareTo(A) 必须返回零。

如果 A.CompareTo(B) 返回零并且 B.CompareTo(C) 返回零,则 A.CompareTo(C) 必须返回零。

如果 A.CompareTo(B) 返回一个非零值,则 B.CompareTo(A) 必须返回符号相反的值。

如果 A.CompareTo(B) 返回一个不等于零的值 x,并且 B.CompareTo(C) 返回一个与 x 符号相同的值 y,则 A.CompareTo(C) 必须返回与 xy 都符号相同的值。

对调用者的说明

使用 CompareTo 方法可确定类的实例的排序。

下面的示例演示 Address 对象的 IComparable 实现。该示例使用泛型 List<T> 对象创建地址集合。List<T> 对象使用 IComparable<T> 实现对列表项进行排序,列表项随后按排序顺序显示。


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

显示: