This documentation is archived and is not being maintained.

IComparable.CompareTo Method

Note: This method is new in the .NET Framework version 2.0.

Compares the current object with another object of the same type.

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

int CompareTo (
	T other
int CompareTo (
	T other
function CompareTo (
	other : T
) : int



An object to compare with this object.

Return Value

A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has the following meanings:



Less than zero

This object is less than the other parameter.


This object is equal to other.

Greater than zero

This object is greater than other.

This method is only a definition and must be implemented by a specific class or value type to have effect. The meaning of the comparisons, "less than," "equal to," and "greater than," depends on the particular implementation.

By definition, any object compares greater than a null reference (Nothing in Visual Basic), and two null references compare equal to each other.

Notes to Implementers For objects A, B, and C, the following must be true: A.CompareTo(A) is required to return zero. If A.CompareTo(B) returns zero, then B.CompareTo(A) is required to return zero. If A.CompareTo(B) returns zero and B.CompareTo(C) returns zero, then A.CompareTo(C) is required to return zero. If A.CompareTo(B) returns a value other than zero, then B.CompareTo(A) is required to return a value of the opposite sign. If A.CompareTo(B) returns a value x that is not equal to zero, and B.CompareTo(C) returns a value y of the same sign as x, then A.CompareTo(C) is required to return a value of the same sign as x and y.

Notes to Callers Use the CompareTo method to determine the ordering of instances of a class.

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 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 .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.

.NET Framework

Supported in: 2.0

.NET Compact Framework

Supported in: 2.0