Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Phương thức CompareTo trong C#


Giới thiệu

CompareTo phương thức của interface IComparable<T> so sánh instance hiện tại với object khác. Trả về int: < 0 (nhỏ hơn), 0 (bằng), > 0 (lớn hơn).

Ví dụ cơ bản

int val1 = 100, val2 = 100;
int res = val1.CompareTo(val2); // 0

Ví dụ hoàn chỉnh

using System;

public class Demo
{
    public static void Main()
    {
        int val1 = 100;
        int val2 = 100;
        int res = val1.CompareTo(val2);
        Console.WriteLine(res); // 0
    }
}

Kết quả

0

Giá trị trả về

Kết quảÝ nghĩa
< 0Instance hiện tại < value
= 0Instance hiện tại == value
> 0Instance hiện tại > value

Các kiểu implement IComparable

  • Tất cả primitive: int, long, float, double, decimal, char, bool, DateTime, TimeSpan, Guid, ...
  • String (so sánh ordinal, case-sensitive).
  • Enum (so sánh underlying value).
  • Tuple, ValueTuple (so sánh lexicographic).

Ví dụ với String

"apple".CompareTo("banana"); // -1 (a < b)
"banana".CompareTo("apple"); // 1
"apple".CompareTo("apple");  // 0
// Case-sensitive: "A".CompareTo("a") < 0 (ASCII: 65 < 97)

Ví dụ với DateTime

DateTime d1 = new DateTime(2023, 1, 1);
DateTime d2 = new DateTime(2023, 12, 31);
d1.CompareTo(d2); // -1 (d1 earlier)

Implement IComparable cho class tùy chỉnh

public class Person : IComparable
{
    public string Name { get; set; }
    public int Age { get; set; }

    public int CompareTo(Person other)
    {
        if (other == null) return 1;
        return Age.CompareTo(other.Age); // So sánh theo tuổi
    }
}

Lưu ý

  • Null được coi là "nhỏ hơn" bất kỳ instance nào (trả về 1 khi so sánh với null).
  • Dùng StringComparison overload cho string so sánh case-insensitive: str.CompareTo(other, StringComparison.OrdinalIgnoreCase) (extension).
  • Cho sorting: list.Sort() dùng CompareTo mặc định.