VB.NET และ C # .NET เป็นภาษาที่แตกต่างกันซึ่งสร้างขึ้นโดยทีมงานต่างๆที่ตั้งสมมติฐานเกี่ยวกับการใช้งานที่แตกต่างกัน ในกรณีนี้คือความหมายของการเปรียบเทียบค่า NULL
ความชอบส่วนตัวของฉันคือความหมายของ VB.NET ซึ่งโดยพื้นฐานแล้วให้ NULL เป็นความหมาย "ฉันยังไม่รู้" จากนั้นเปรียบเทียบ 5 กับ "ฉันยังไม่รู้" เป็นธรรมชาติ "ฉันยังไม่รู้"; เช่น NULL สิ่งนี้มีข้อดีเพิ่มเติมของการจำลองลักษณะการทำงานของ NULL ในฐานข้อมูล SQL (ส่วนใหญ่ถ้าไม่ใช่ทั้งหมด) นี้ยังเป็นมาตรฐานมากขึ้น (กว่า C # 's) การตีความของตรรกะสามมูลค่าตามที่อธิบายไว้ที่นี่
ทีม C # ตั้งสมมติฐานที่แตกต่างกันเกี่ยวกับความหมายของ NULL ซึ่งส่งผลให้พฤติกรรมที่คุณแสดงนั้นแตกต่างกัน เอริค Lippert เขียนบล็อกเกี่ยวกับความหมายของการเป็นโมฆะใน C # Per Eric Lippert: "ฉันยังเขียนเกี่ยวกับความหมายของ null ใน VB / VBScript และ JScript ที่นี่และ ที่นี่ "
ในสภาพแวดล้อมใด ๆ ที่เป็นไปได้ค่า NULL เป็นเรื่องที่ไม่จำเป็นที่จะต้องยอมรับว่ากฎแห่งการยกเว้นกลาง (กล่าวคือ A หรือ ~ A เป็นความจริงอย่างเคร่งครัด) ไม่สามารถพึ่งพาได้อีกต่อไป
อัปเดต:
A bool
(ตรงข้ามกับ a bool?
) สามารถรับได้เฉพาะค่า TRUE และ FALSE อย่างไรก็ตามการใช้ภาษาของ NULL ต้องตัดสินใจว่า NULL แพร่กระจายผ่านนิพจน์อย่างไร ใน VB นิพจน์5=null
และ5<>null
ทั้งสองส่งคืนเท็จ ใน C # ของนิพจน์ที่เทียบเคียงกัน5==null
และ5!=null
เฉพาะวินาทีแรก[อัปเดตเมื่อ 2014-03-02 - PG] เท่านั้นที่คืนค่าเป็นเท็จ อย่างไรก็ตามในสภาพแวดล้อมใด ๆ ที่สนับสนุน null โปรแกรมเมอร์จะต้องทราบตารางความจริงและการแพร่กระจาย null ที่ใช้โดยภาษานั้นในสภาพแวดล้อมใด ๆ
อัปเดต
บทความบล็อกของ Eric Lippert (กล่าวถึงในความคิดเห็นด้านล่าง) เกี่ยวกับความหมายอยู่ที่: