Tôi có hai đối tượng trong C # và không biết đó là Boolean hay bất kỳ loại nào khác. Tuy nhiên khi tôi cố gắng so sánh những C # đó không đưa ra câu trả lời đúng. Tôi đã thử mã tương tự với VB.NET và điều đó đã làm điều đó!
Bất cứ ai có thể cho tôi biết làm thế nào để khắc phục điều này nếu có một giải pháp?
C #:
object a = true;
object b = true;
object c = false;
if (a == b) c = true;
MessageBox.Show(c.ToString()); //Outputs False !!
VB.NET:
Dim a As Object = True
Dim b As Object = True
Dim c As Object = False
If (a = b) Then c = True
MessageBox.Show(c.ToString()) '// Outputs True
a
bạn nhận được quyền anh và tạo ra một hộp chứa true
. Khi bạn gán cho b
bạn nhận được một hộp khác cũng chứa true
. Khi bạn so sánh a
và b
, vì cả hai đều thuộc loại thời gian biên dịch object
, bạn gọi mức quá tải operator ==(object, object)
được xác định bởi Đặc tả ngôn ngữ C #. Quá tải này kiểm tra xem các tham chiếu có đi đến cùng một đối tượng không. Vì bạn có hai hộp, kết quả là false
và câu lệnh "bên dưới" của bạn if
sẽ không chạy. Để hiểu rõ hơn về điều này, hãy thử thay đổi sự phân công b
này: object b = a;
Bây giờ bạn chỉ có một hộp.
a.Equals(b)
?