Tôi tự hỏi làm thế nào bạn có thể so sánh hai số nguyên đóng hộp (hoặc có thể được ký hoặc không ký) với nhau để bình đẳng.So sánh hai đối tượng số nguyên cho sự bình đẳng bất kể loại
Ví dụ, hãy nhìn vào kịch bản này:
// case #1
object int1 = (int)50505;
object int2 = (int)50505;
bool success12 = int1.Equals(int2); // this is true. (pass)
// case #2
int int3 = (int)50505;
ushort int4 = (ushort)50505;
bool success34 = int3.Equals(int4); // this is also true. (pass)
// case #3
object int5 = (int)50505;
object int6 = (ushort)50505;
bool success56 = int5.Equals(int6); // this is false. (fail)
Tôi đang bối rối về cách đáng tin cậy so sánh các loại nguyên đóng hộp theo cách này. Tôi sẽ không biết chúng là gì cho đến khi thời gian chạy, và tôi không thể bỏ cả hai đến long
, bởi vì người ta có thể là ulong
. Tôi cũng không thể chuyển đổi cả hai thành ulong
bởi vì người dùng có thể là số âm.
Ý tưởng hay nhất mà tôi có thể đưa ra là chỉ thử nghiệm và đưa ra lỗi cho đến khi tôi có thể tìm thấy loại phổ biến hoặc có thể loại trừ chúng không bằng nhau, không phải là giải pháp lý tưởng.
'int3.Equals()' không thực sự là overriden 'Equals', nó là một quá tải (' Equals (int) 'vs' Equals (object) ') – Rob
Bạn có nghĩa là" nhưng trường hợp 3 thất bại "? –
Có thể trùng lặp của [Tại sao ((đối tượng) (int) 1) .Equals (((đối tượng) (ushort) 1)) sản lượng sai?] (Http: // stackoverflow.com/questions/25305393/why-does-objectint1-equalsobjectushort1-yield-false) –