This documentation is archived and is not being maintained.

IComparable Generic Interface

Defines a generalized comparison method that a value type or class implements to create a type-specific comparison method for ordering instances.

Namespace: System
Assembly: mscorlib (in mscorlib.dll)

generic<typename T>
public interface class IComparable
J# supports the use of generic types and methods, but not the declaration of new ones.
JScript does not support generic types and methods.
Not applicable.

Type Parameters


The type of objects to compare.

This interface is implemented by types whose values can be ordered; for example, the numeric and string classes. A value type or class implements the CompareTo method to create a type-specific comparison method suitable for purposes such as sorting.


The IComparable interface defines the CompareTo method, which determines the sort order of instances of the implementing type. The IEquatable interface defines the Equals method, which determines the equality of instances of the implementing type.

Notes to Implementers: Replace the type parameter of the IComparable interface with the type that is implementing this interface.

The following code example illustrates the implementation of IComparable for a simple Temperature object. The example creates a SortedList collection of strings with Temperature object keys, and adds several pairs of temperatures and strings to the list out of sequence. The SortedList collection uses the IComparable implementation to sort the list entries, which are then displayed in order of increasing temperature.

#using <System.dll>

using namespace System;
using namespace System::Collections::Generic;

public ref class Temperature: public IComparable<Temperature^> {

   // The value holder
   Double m_value;

   // Implement the CompareTo method. For the parameter type, Use 
   // the type specified for the type parameter of the generic 
   // IComparable interface. 
   virtual Int32 CompareTo( Temperature^ other ) {

      // The temperature comparison depends on the comparison of the
      // the underlying Double values. Because the CompareTo method is
      // strongly typed, it is not necessary to test for the correct
      // object type.
      return m_value.CompareTo( other->m_value );

   property Double Celsius {
      Double get() {
         return m_value + 273.15;

   property Double Kelvin {
      Double get() {
         return m_value;
      void set( Double value ) {
         if (value < 0)
            throw gcnew ArgumentException("Temperature cannot be less than absolute zero.");
            m_value = value;

   Temperature(Double degreesKelvin) {
      this->Kelvin = degreesKelvin;

int main() {
   SortedList<Temperature^, String^>^ temps = 
      gcnew SortedList<Temperature^, String^>();

   // Add entries to the sorted list, out of order.
   temps->Add(gcnew Temperature(2017.15), "Boiling point of Lead");
   temps->Add(gcnew Temperature(0), "Absolute zero");
   temps->Add(gcnew Temperature(273.15), "Freezing point of water");
   temps->Add(gcnew Temperature(5100.15), "Boiling point of Carbon");
   temps->Add(gcnew Temperature(373.15), "Boiling point of water");
   temps->Add(gcnew Temperature(600.65), "Melting point of Lead");

   for each( KeyValuePair<Temperature^, String^>^ kvp in temps )
      Console::WriteLine("{0} is {1} degrees Celsius.", kvp->Value, kvp->Key->Celsius);

/* This code example productes the following output:

Absolute zero is 273.15 degrees Celsius.
Freezing point of water is 546.3 degrees Celsius.
Boiling point of water is 646.3 degrees Celsius.
Melting point of Lead is 873.8 degrees Celsius.
Boiling point of Lead is 2290.3 degrees Celsius.
Boiling point of Carbon is 5373.3 degrees Celsius.


Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.

.NET Framework

Supported in: 3.0, 2.0

.NET Compact Framework

Supported in: 2.0

XNA Framework

Supported in: 1.0