IComparable.CompareTo(Object) Methode

Definitie

Vergelijkt het huidige exemplaar met een ander object van hetzelfde type en retourneert een geheel getal dat aangeeft of de huidige instantie voorafgaat aan, volgt of zich op dezelfde positie in de sorteervolgorde bevindt als het andere object.

public:
 int CompareTo(System::Object ^ obj);
public int CompareTo(object obj);
public int CompareTo(object? obj);
abstract member CompareTo : obj -> int
Public Function CompareTo (obj As Object) As Integer

Parameters

obj
Object

Een object dat moet worden vergeleken met dit exemplaar.

Retouren

Een waarde die de relatieve volgorde aangeeft van de objecten die worden vergeleken. De retourwaarde heeft de volgende betekenissen:

Waarde Betekenis
Kleiner dan nul Dit exemplaar gaat vooraf obj aan de sorteervolgorde.
Nul Dit exemplaar bevindt zich op dezelfde positie in de sorteervolgorde als obj.
Groter dan nul Dit exemplaar volgt obj in de sorteervolgorde.

Uitzonderingen

obj is niet hetzelfde type als dit exemplaar.

Voorbeelden

Het volgende voorbeeld illustreert het gebruik van het vergelijken van CompareTo een Temperature object dat wordt geïmplementeerd IComparable met een ander object. Het Temperature object wordt geïmplementeerd CompareTo door simpelweg een aanroep naar de Int32.CompareTo methode te verpakken.

using System;
using System.Collections;

public class Temperature : IComparable
{
    // The temperature value
    protected double temperatureF;

    public int CompareTo(object obj) {
        if (obj == null) return 1;

        Temperature otherTemperature = obj as Temperature;
        if (otherTemperature != null)
            return this.temperatureF.CompareTo(otherTemperature.temperatureF);
        else
           throw new ArgumentException("Object is not a Temperature");
    }

    public double Fahrenheit
    {
        get
        {
            return this.temperatureF;
        }
        set 
        {
            this.temperatureF = value;
        }
    }

    public double Celsius
    {
        get
        {
            return (this.temperatureF - 32) * (5.0/9);
        }
        set
        {
            this.temperatureF = (value * 9.0/5) + 32;
        }
    }
}

public class CompareTemperatures
{
   public static void Main()
   {
      ArrayList temperatures = new ArrayList();
      // Initialize random number generator.
      Random rnd = new Random();

      // Generate 10 temperatures between 0 and 100 randomly.
      for (int ctr = 1; ctr <= 10; ctr++)
      {
         int degrees = rnd.Next(0, 100);
         Temperature temp = new Temperature();
         temp.Fahrenheit = degrees;
         temperatures.Add(temp);
      }

      // Sort ArrayList.
      temperatures.Sort();

      foreach (Temperature temp in temperatures)
         Console.WriteLine(temp.Fahrenheit);
   }
}
// The example displays the following output to the console (individual
// values may vary because they are randomly generated):
//       2
//       7
//       16
//       17
//       31
//       37
//       58
//       66
//       72
//       95
open System
open System.Collections

type Temperature() =
    // The temperature value
    let mutable temperatureF = 0.

    interface IComparable with
        member _.CompareTo(obj) =
            match obj with 
            | null -> 1
            | :? Temperature as other -> 
                temperatureF.CompareTo other.Fahrenheit
            | _ ->
                invalidArg (nameof obj) "Object is not a Temperature"

    member _.Fahrenheit 
        with get () =
            temperatureF
        and set (value) = 
            temperatureF <- value

    member _.Celsius
        with get () =
            (temperatureF - 32.) * (5. / 9.)
        and set (value) =
            temperatureF <- (value * 9. / 5.) + 32.

let temperatures = ResizeArray()

// Initialize random number generator.
let rnd = Random()

// Generate 10 temperatures between 0 and 100 randomly.
for _ = 1 to 10 do
    let degrees = rnd.Next(0, 100)
    let temp = Temperature(Fahrenheit=degrees)
    temperatures.Add temp

// Sort ResizeArray.
temperatures.Sort()

for temp in temperatures do
    printfn $"{temp.Fahrenheit}"

// The example displays the following output to the console (individual
// values may vary because they are randomly generated):
//       2
//       7
//       16
//       17
//       31
//       37
//       58
//       66
//       72
//       95
Imports System.Collections

Public Class Temperature
    Implements IComparable
    ' The temperature value
    Protected temperatureF As Double

    Public Overloads Function CompareTo(ByVal obj As Object) As Integer _
        Implements IComparable.CompareTo
        
        If obj Is Nothing Then Return 1

        Dim otherTemperature As Temperature = TryCast(obj, Temperature)
        If otherTemperature IsNot Nothing Then
            Return Me.temperatureF.CompareTo(otherTemperature.temperatureF)
        Else
           Throw New ArgumentException("Object is not a Temperature")
        End If   
    End Function

    Public Property Fahrenheit() As Double
        Get
            Return temperatureF
        End Get
        Set(ByVal Value As Double)
            Me.temperatureF = Value
        End Set
    End Property

    Public Property Celsius() As Double
        Get
            Return (temperatureF - 32) * (5/9)
        End Get
        Set(ByVal Value As Double)
            Me.temperatureF = (Value * 9/5) + 32
        End Set
    End Property
End Class

Public Module CompareTemperatures
   Public Sub Main()
      Dim temperatures As New ArrayList
      ' Initialize random number generator.
      Dim rnd As New Random()
      
      ' Generate 10 temperatures between 0 and 100 randomly.
      For ctr As Integer = 1 To 10
         Dim degrees As Integer = rnd.Next(0, 100)
         Dim temp As New Temperature
         temp.Fahrenheit = degrees
         temperatures.Add(temp)   
      Next

      ' Sort ArrayList.
      temperatures.Sort()
      
      For Each temp As Temperature In temperatures
         Console.WriteLine(temp.Fahrenheit)
      Next      
   End Sub
End Module
' The example displays the following output to the console (individual
' values may vary because they are randomly generated):
'       2
'       7
'       16
'       17
'       31
'       37
'       58
'       66
'       72
'       95

Opmerkingen

De CompareTo methode wordt geïmplementeerd op typen waarvan de waarden kunnen worden gesorteerd of gesorteerd. Deze wordt automatisch aangeroepen door methoden van niet-algemene verzamelingsobjecten, zoals Array.Sort, om elk lid van de matrix te orden. Als een aangepaste klasse of structuur niet wordt geïmplementeerd IComparable, kunnen de leden ervan niet worden geordend en kan de sorteerbewerking een InvalidOperationException.

Deze methode is alleen een definitie en moet worden geïmplementeerd door een specifieke klasse of waardetype om effect te hebben. De betekenis van de vergelijkingen die zijn opgegeven in de sectie Retourwaarde ("gaat vooraf", "komt op dezelfde positie als" en "volgt") af van de specifieke implementatie.

Elk object vergelijkt per definitie groter dan (of volgt) nullen twee null-verwijzingen vergelijken elkaar.

De parameter, objmoet hetzelfde type zijn als het klasse- of waardetype dat deze interface implementeert. Anders wordt er een ArgumentException gegenereerd.

Notities voor uitvoerders

Voor objecten A, B en C moet het volgende waar zijn:

A.CompareTo(A) moet nul retourneren.

Als A.CompareTo(B) nul wordt geretourneerd, B.CompareTo(A) moet u nul retourneren.

Als A.CompareTo(B) nul wordt geretourneerd en B.CompareTo(C) nul retourneert, moet u A.CompareTo(C) nul retourneren.

Als A.CompareTo(B) een andere waarde dan nul wordt geretourneerd, moet u B.CompareTo(A) een waarde van het tegenovergestelde teken retourneren.

Als A.CompareTo(B) een waarde 'x' niet gelijk is aan nul, en B.CompareTo(C) een waarde 'y' retourneert van hetzelfde teken als 'x', moet u A.CompareTo(C) een waarde van hetzelfde teken als 'x' en 'y' retourneren.

Notities voor bellers

Gebruik de CompareTo(Object) methode om de volgorde van exemplaren van een klasse te bepalen.

Van toepassing op

Zie ook