ฉันมีสองวัตถุใน 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)?