Xét đoạn mã sau:Tại sao CompareTo lại được triển khai một cách ngắn gọn theo cách này?
namespace ConsoleApplication1 {
class Program
{
static void Main(string[] args)
{
Console.WriteLine(100.CompareTo(200)); // prints -1
Console.WriteLine(((decimal)100).CompareTo((decimal)200)); // prints -1
Console.WriteLine(((short)100).CompareTo((short)200)); // prints -100
Console.WriteLine(((float)100).CompareTo((float)200)); // prints -1
Console.ReadKey();
}
}
}
Câu hỏi của tôi là, liệu có bất kỳ lý do cụ thể CompareTo-phương pháp trên Int16 trả về giá trị khác hơn là -1, 0 và 1?
ILSpy cho thấy nó được thực hiện theo cách này
public int CompareTo(short value)
{
return (int)(this - value);
}
trong khi phương pháp này là implented trên Int32 cách này
public int CompareTo(int value)
{
if (this < value)
{
return -1;
}
if (this > value)
{
return 1;
}
return 0;
}
Cảm ơn câu trả lời của bạn. Đã không nghĩ về vấn đề tràn. Thật không may, tôi phải duy trì một ứng dụng kế thừa chứa rất nhiều mã giả định CompareTo trả về luôn -1, 0 hoặc 1 ... – sloth
@dkson: Tôi khuyên bạn nên sửa mã cũ. Đó là loại giả định sẽ chỉ đơn giản là giữ cắn bạn cho đến khi bạn cuối cùng sửa chữa nó. Tốt hơn để làm điều đó sớm hơn là sau này - và giáo dục các nhà phát triển ban đầu, nếu họ vẫn còn xung quanh ... –