İngilizce dilinde oku

Aracılığıyla paylaş


IComparable<T>.CompareTo(T) Yöntem

Tanım

Mevcut örneği aynı türdeki başka bir nesne ile karşılaştırır ve geçerli örneğin, diğer nesneyle aynı sıralama düzeni konumunda mı olduğunu, önünde mi olduğunu, yoksa arkasında mı olduğunu belirten bir tamsayı döndürür.

C#
public int CompareTo (T other);
C#
public int CompareTo (T? other);

Parametreler

other
T

Bu örnekle karşılaştırılacak bir nesne.

Döndürülenler

Int32

Karşılaştırılan nesnelerin göreli sırasını gösteren bir değer. Dönüş değeri şu anlamlara sahiptir:

Değer Anlamı
Sıfırdan küçük Bu örnek, other sıralama düzeninden öncedir.
Sıfır Bu örnek, sıralama düzeninde otherile aynı konumda gerçekleşir.
Sıfırdan büyük Bu örnek sıralama düzeninde izlenir other .

Örnekler

Aşağıdaki kod örneği, basit Temperature bir nesne için uygulamasını IComparable<T> gösterir. Örnek, nesne anahtarlarıyla Temperature bir SortedList<TKey,TValue> dize koleksiyonu oluşturur ve sıra dışı olarak listeye birkaç sıcaklık ve dize çifti ekler. yöntemi çağrısında Add SortedList<TKey,TValue> koleksiyon, daha sonra sıcaklığı artırmaya göre görüntülenen liste girdilerini sıralamak için uygulamasını kullanır IComparable<T> .

C#
using System;
using System.Collections.Generic;

public class Temperature : IComparable<Temperature>
{
    // Implement the generic CompareTo method with the Temperature
    // class as the Type parameter.
    //
    public int CompareTo(Temperature other)
    {
        // If other is not a valid object reference, this instance is greater.
        if (other == null) return 1;

        // The temperature comparison depends on the comparison of
        // the underlying Double values.
        return m_value.CompareTo(other.m_value);
    }

    // Define the is greater than operator.
    public static bool operator >  (Temperature operand1, Temperature operand2)
    {
       return operand1.CompareTo(operand2) > 0;
    }

    // Define the is less than operator.
    public static bool operator <  (Temperature operand1, Temperature operand2)
    {
       return operand1.CompareTo(operand2) < 0;
    }

    // Define the is greater than or equal to operator.
    public static bool operator >=  (Temperature operand1, Temperature operand2)
    {
       return operand1.CompareTo(operand2) >= 0;
    }

    // Define the is less than or equal to operator.
    public static bool operator <=  (Temperature operand1, Temperature operand2)
    {
       return operand1.CompareTo(operand2) <= 0;
    }

    // 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 kelvins)
    {
        this.Kelvin = kelvins;
    }
}

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 example displays 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.
*/

Açıklamalar

CompareTo , genel bir koleksiyon nesnesinin üyelerini sıralamak için kesin olarak belirlenmiş bir karşılaştırma yöntemi sağlar. Bu nedenle, genellikle doğrudan geliştirici kodundan çağrılmıyor. Bunun yerine, ve Addgibi yöntemler tarafından otomatik olarak List<T>.Sort() çağrılır.

Bu yöntem yalnızca bir tanımdır ve etkili olması için belirli bir sınıf veya değer türü tarafından uygulanması gerekir. Dönüş Değerleri bölümünde belirtilen karşılaştırmaların anlamı ("önce gelir", "ile aynı konumda gerçekleşir" ve "aşağıdakiler) belirli uygulamaya bağlıdır.

Tanım gereği, herhangi bir nesne değerinden nullbüyük ve iki null başvuru birbirine eşit olarak karşılaştırır.

Uygulayanlara Notlar

A, B ve C nesneleri için aşağıdakiler doğru olmalıdır: Sıfır döndürmek için A.CompareTo(A) gereklidir.

A.CompareTo(B) sıfır döndürürse, sıfır döndürmek için B.CompareTo(A) gerekir.

A.CompareTo(B) sıfır, B.CompareTo(C) sıfır döndürürse, sıfır döndürmek için A.CompareTo(C) gerekir.

A.CompareTo(B) sıfır dışında bir değer döndürürse, karşıt işareti değerini döndürmek için B.CompareTo(A) gerekir.

A.CompareTo(B) sıfıra eşit olmayan bir değer x döndürürse ve B.CompareTo(C) ile aynı işaretin xdeğerini y döndürürse, ve yile aynı işaretin x değerini döndürmek için A.CompareTo(C) gerekir.

Arayanlara Notlar

Bir sınıfın CompareTo(T) örneklerinin sıralamasını belirlemek için yöntemini kullanın.

Şunlara uygulanır

Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Ayrıca bkz.