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 |
|---|---|
| < 0 | Instance hiện tại < value |
| = 0 | Instance hiện tại == value |
| > 0 | Instance 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
StringComparisonoverload cho string so sánh case-insensitive:str.CompareTo(other, StringComparison.OrdinalIgnoreCase)(extension). - Cho sorting:
list.Sort()dùng CompareTo mặc định.