IComparable.CompareTo(Object) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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.