IComparable<T> インターフェイス

2013/12/12

インスタンスの並べ替えなどを目的とし、型固有の比較メソッドを作成するために値型またはクラスで実装する、汎用の比較メソッドを定義します。

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

表示:
© 2014 Microsoft