สมมติว่าฉันมีวิธี:
public void DoSomething(ISomeInterface someObject)
{
if(someObject == null) throw new ArgumentNullException("someObject");
someObject.DoThisOrThat();
}
ฉันได้รับการฝึกฝนให้เชื่อว่าการขว้างArgumentNullException
เป็น "ถูกต้อง" แต่ข้อผิดพลาด "การอ้างอิงวัตถุไม่ได้ถูกตั้งค่าเป็นอินสแตนซ์ของวัตถุ" หมายความว่าฉันมีข้อผิดพลาด
ทำไม?
ฉันรู้ว่าถ้าฉันแคชอ้างอิงsomeObject
และใช้ในภายหลังแล้วมันจะดีกว่าที่จะตรวจสอบความว่างเปล่าเมื่อผ่านไปและล้มเหลวก่อน อย่างไรก็ตามหากฉันอ้างถึงในบรรทัดถัดไปทำไมเราจึงควรตรวจสอบ มันจะโยนข้อยกเว้นไม่ทางใดก็ทางหนึ่ง
แก้ไข :
มันเพิ่งเกิดขึ้นกับฉัน ... ความกลัวของโมฆะที่ลงทะเบียนไม่ได้มาจากภาษาอย่าง C ++ ที่ไม่ได้ตรวจสอบคุณ (นั่นเป็นเพียงแค่พยายามที่จะเรียกใช้วิธีการบางอย่างที่ตำแหน่งหน่วยความจำ zero + method offset)?