เรามีรหัสนี้ซึ่งเมื่อทำให้ง่ายขึ้นจะมีลักษณะเช่นนี้:
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
คุณสมบัติเป็นโมฆะ
ข้อใดถูกต้องที่สุด หรือมีความเป็นไปได้ที่สี่?