Compares the current object with another object of the same type.
Namespace:
System
Assembly:
mscorlib (in mscorlib.dll)
Visual Basic (Declaration)
Function CompareTo ( _
other As T _
) As Integer
Dim instance As IComparable
Dim other As T
Dim returnValue As Integer
returnValue = instance.CompareTo(other)
function CompareTo(
other : T
) : int
Parameters
- other
- Type: T
An object to compare with this object.
Return Value
Type:
System..::.Int32A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has the following meanings:
Value | Meaning |
|---|
Less than zero | This object is less than the other parameter. |
Zero | This object is equal to other. |
Greater than zero | This object is greater than other. |
CompareTo provides a strongly typed comparison method for ordering members of a generic collection object. Because of this, it is usually not called directly from developer code. Instead, it is called automatically by methods such as List<(Of <(T>)>)..::.Sort()()() and Add.
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 nullNothingnullptra 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<(Of <(TKey, TValue>)>) collection of strings with Temperature object keys, and adds several pairs of temperatures and strings to the list out of sequence. In the call to the Add method, the SortedList<(Of <(TKey, TValue>)>) collection uses the IComparable<(Of <(T>)>) implementation to sort the list entries, which are then displayed in order of increasing temperature.
Imports System
Imports System.Collections.Generic
Public Class Temperature
Implements IComparable(Of Temperature)
' Implement the generic CompareTo method. In the Implements statement,
' specify the Temperature class for the type parameter of the
' generic IComparable interface. Use that type for the parameter
' of the CompareTo method.
'
Public Overloads Function CompareTo(ByVal other As Temperature) As Integer _
Implements IComparable(Of Temperature).CompareTo
' 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)
End Function
' The underlying temperature value.
Protected m_value As Double = 0.0
Public ReadOnly Property Celsius() As Double
Get
Return m_value - 273.15
End Get
End Property
Public Property Kelvin() As Double
Get
Return m_value
End Get
Set(ByVal Value As Double)
If value < 0.0 Then
Throw New ArgumentException("Temperature cannot be less than absolute zero.")
Else
m_value = Value
End If
End Set
End Property
Public Sub New(ByVal degreesKelvin As Double)
Me.Kelvin = degreesKelvin
End Sub
End Class
Public Class Example
Public Shared Sub Main()
Dim temps As New SortedList(Of Temperature, String)
' Add entries to the sorted list, out of order.
temps.Add(New Temperature(2017.15), "Boiling point of Lead")
temps.Add(New Temperature(0), "Absolute zero")
temps.Add(New Temperature(273.15), "Freezing point of water")
temps.Add(New Temperature(5100.15), "Boiling point of Carbon")
temps.Add(New Temperature(373.15), "Boiling point of water")
temps.Add(New Temperature(600.65), "Melting point of Lead")
For Each kvp As KeyValuePair(Of Temperature, String) In temps
Console.WriteLine("{0} is {1} degrees Celsius.", kvp.Value, kvp.Key.Celsius)
Next
End Sub
End Class
' This code example produces the following output:
'
'Absolute zero is -273.15 degrees Celsius.
'Freezing point of water is 0 degrees Celsius.
'Boiling point of water is 100 degrees Celsius.
'Melting point of Lead is 327.5 degrees Celsius.
'Boiling point of Lead is 1744 degrees Celsius.
'Boiling point of Carbon is 4827 degrees Celsius.
'
using System;
using System.Collections.Generic;
public class Temperature : IComparable<Temperature>
{
// Implement the CompareTo method. For the parameter type, Use
// the type specified for the type parameter of the generic
// IComparable interface.
//
public int 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);
}
// The underlying temperature value.
protected double m_value = 0.0;
public double Celsius
{
get
{
return m_value - 273.15;
}
}
public double Kelvin
{
get
{
return m_value;
}
set
{
if (value < 0.0)
{
throw new ArgumentException("Temperature cannot be less than absolute zero.");
}
else
{
m_value = value;
}
}
}
public Temperature(double degreesKelvin)
{
this.Kelvin = degreesKelvin;
}
}
public class Example
{
public static void Main()
{
SortedList<Temperature, string> temps =
new SortedList<Temperature, string>();
// Add entries to the sorted list, out of order.
temps.Add(new Temperature(2017.15), "Boiling point of Lead");
temps.Add(new Temperature(0), "Absolute zero");
temps.Add(new Temperature(273.15), "Freezing point of water");
temps.Add(new Temperature(5100.15), "Boiling point of Carbon");
temps.Add(new Temperature(373.15), "Boiling point of water");
temps.Add(new Temperature(600.65), "Melting point of Lead");
foreach( KeyValuePair<Temperature, string> kvp in temps )
{
Console.WriteLine("{0} is {1} degrees Celsius.", kvp.Value, kvp.Key.Celsius);
}
}
}
/* This code example produces the following output:
Absolute zero is -273.15 degrees Celsius.
Freezing point of water is 0 degrees Celsius.
Boiling point of water is 100 degrees Celsius.
Melting point of Lead is 327.5 degrees Celsius.
Boiling point of Lead is 1744 degrees Celsius.
Boiling point of Carbon is 4827 degrees Celsius.
*/
#using <System.dll>
using namespace System;
using namespace System::Collections::Generic;
public ref class Temperature: public IComparable<Temperature^> {
protected:
// The value holder
Double m_value;
public:
// 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.");
else
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 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360, Zune
The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
.NET Framework
Supported in: 3.5, 3.0, 2.0
.NET Compact Framework
Supported in: 3.5, 2.0
XNA Framework
Supported in: 3.0, 2.0, 1.0
Reference