ฉันมีสองวัตถุใน C # และไม่ทราบว่าเป็นบูลีนหรือประเภทอื่น ๆ อย่างไรก็ตามเมื่อฉันพยายามเปรียบเทียบ C # เหล่านั้นล้มเหลวในการให้คำตอบที่ถูกต้อง ฉันได้ลองใช้รหัสเดียวกันกับ VB.NET แล้วและได้ทำเช่นนั้น!
ใครช่วยบอกฉันได้ว่าจะแก้ไขได้อย่างไรถ้ามีทางออก?
ค#:
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
true
เมื่อคุณกำหนดให้b
คุณได้รับอีกtrue
กล่องนอกจากนี้ยังมี เมื่อคุณเปรียบเทียบa
และb
เนื่องจากทั้งคู่เป็นประเภทเวลาคอมไพล์object
คุณจึงเรียกโอเวอร์โหลดที่operator ==(object, object)
กำหนดโดยข้อกำหนดภาษา C # โอเวอร์โหลดนี้ตรวจสอบเพื่อดูว่าการอ้างอิงไปที่วัตถุเดียวกันหรือไม่ เนื่องจากคุณมีสองช่องผลลัพธ์คือfalse
และคำสั่ง "ใต้" คุณif
จะไม่ทำงาน เพื่อให้เข้าใจสิ่งนี้ดีขึ้นลองเปลี่ยนการมอบหมายb
เป็น: object b = a;
ตอนนี้คุณมีเพียงหนึ่งช่อง
a.Equals(b)
?