เรามีรหัสนี้ซึ่งเมื่อทำให้ง่ายขึ้นจะมีลักษณะเช่นนี้:
public class Room
{
public Client Client { get; set; }
public long ClientId
{
get
{
return Client == null ? 0 : Client.Id;
}
}
}
public class Client
{
public long Id { get; set; }
}
ตอนนี้เรามีสามมุมมอง
1) นี่เป็นรหัสที่ดีเพราะClientควรตั้งค่าคุณสมบัติ (เช่นไม่ใช่โมฆะ) ดังนั้นClient == nullจะไม่เกิดขึ้นและค่ารหัส0แสดงถึงรหัสเท็จอย่างไรก็ตาม (นี่คือความเห็นของผู้เขียนรหัส ;-))
2) คุณไม่สามารถพึ่งพาผู้เรียกได้ว่า0เป็นค่าเท็จIdและเมื่อ Clientควรตั้งค่าคุณสมบัติคุณควรโยนexceptionในgetเมื่อClientคุณสมบัติเกิดขึ้นเป็นโมฆะ
3) เมื่อClientควรตั้งค่าคุณสมบัติคุณเพียงแค่ส่งคืนClient.Idและปล่อยให้โค้ดโยนNullRefข้อยกเว้นเมื่อClientคุณสมบัติเป็นโมฆะ
ข้อใดถูกต้องที่สุด หรือมีความเป็นไปได้ที่สี่?