エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

IComparable<T>.CompareTo メソッド

2013/12/12

現在のオブジェクトを同じ型の別のオブジェクトと比較します。

Namespace:  System
アセンブリ:  mscorlib (mscorlib.dll 内)

int CompareTo(
	T other
)

パラメーター

other
型: T
このオブジェクトと比較するオブジェクト。

戻り値

型: System.Int32
比較対象オブジェクトの相対順序を示す 32 ビット符号付き整数。戻り値の意味は次のとおりです。

説明

ゼロより小

このオブジェクトが other パラメーターより小さいことを意味します。

ゼロ

このオブジェクトが other と等しいことを意味します。

ゼロより大

このオブジェクトが other よりも大きいことを意味します。

CompareTo には、ジェネリック コレクション オブジェクトのメンバーを並べ替えるための、厳密に型指定された比較メソッドが用意されています。このため、これは開発者のコードから通常直接呼び出されることはありません。その代わりに、List<T>.Sort() メソッドによって自動的に呼び出されます。

このメソッドは定義するだけなので、実際に使用する場合は、特定のクラスや値で実装する必要があります。比較における "より小さい"、"等価"、および "より大きい" の意味は、個別の実装によって異なります。

定義により、すべてのオブジェクトは null よりも大きく、また 2 つの null 参照は互いに等しくなります。

実装時の注意

オブジェクト A、B、C について、次の条件が満たされる必要があります。

A.CompareTo(A) は 0 を返す必要があります。

A.CompareTo(B) が 0 を返す場合は、B.CompareTo(A) も 0 を返す必要があります。

A.CompareTo(B) が 0 を返し、B.CompareTo(C) が 0 を返す場合は、A.CompareTo(C) も 0 を返す必要があります。

A.CompareTo(B) が 0 以外の値を返す場合、B.CompareTo(A) は反対の符号の値を返す必要があります。

A.CompareTo(B) が 0 でない値 x を返し、B.CompareTo(C)x と同じ符号の値 y を返す場合、A.CompareTo(C)x および y と同じ符号の値を返す必要があります。

呼び出し時の注意

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

表示:
© 2014 Microsoft