Điều tôi đang cố gắng đạt được ở đây là so sánh giá trị thẳng của các loại nguyên thủy được đóng hộp.So sánh loại giá trị được đóng hộp
((object)12).Equals((object)12); // Type match will result in a value comparison,
((object)12).Equals((object)12d); // but a type mismatch will not. (false)
object.Equals((object)12,(object)12d); // Same here. (false)
Tôi hiểu 'lý do'. Tôi chỉ không thấy 'làm sao'.
Các loại không xác định cho đến khi chạy, nơi chúng có thể là bất kỳ loại nguyên thủy nào từ nguồn dữ liệu. Điều đó bao gồm chuỗi, datetimes, bools, vv Tôi đã đi xuống con đường xấu xí của việc viết một phương pháp mở rộng mà làm việc ra cả hai loại, và sau đó phôi trước khi thực hiện một so sánh '==': (Đối với đầy đủ, tôi bao gồm tất cả nguyên thủy loại, cộng với những người tôi đã quan tâm đến)
public static bool ValueEquals(this object thisObj, object compare)
{
if (thisObj is int)
{
int obj = (int)thisObj;
if (compare is int)
return (obj == (int)compare);
if (compare is uint)
return (obj == (uint)compare);
if (compare is decimal)
return (obj == (decimal)compare);
if (compare is float)
return (obj == (float)compare);
<... and so on for each primitive type ...>
}
if (thisObj is uint)
{
uint obj = (uint)thisObj;
if (compare is int)
return (obj == (int)compare);
if (compare is uint)
return (obj == (uint)compare);
<... Again for each primitive type ...>
}
if (thisObj is decimal)
{
decimal obj = (decimal)thisObj;
if (compare is int)
return (obj == (int)compare);
<... Etc, etc ...>
phương pháp kết quả hóa ra là dài 300 dòng, đó là tốt (chưa gớm ghiếc), nhưng bây giờ tôi cần phải làm nhiều hơn là chỉ '=='. Tôi cần>, <, < =,> =,! =.
Có điều gì trong Phản hồi mà tôi có thể sử dụng cho các so sánh loại giá trị được đóng hộp không?
Có gì không?
Vì vậy, bạn chỉ muốn có thể so sánh hai giá trị được đóng hộp UNLIKE có thể chứa cùng một giá trị? Bạn không muốn Equals() vì hầu hết các so sánh không giống như các kiểu trả về false. Tôi muốn thử một cái gì đó như ... –
Thay vào đó hãy sử dụng từ khóa * động * C# 4.0 *. –
Tôi muốn tránh động vì bạn dễ bị các vấn đề thời gian chạy hơn. Với giải pháp dưới đây bạn ít nhất biết rằng cả hai loại đều có thể chuyển đổi tại thời gian biên dịch và tránh nhiều lỗi thời gian chạy. –