Abbiamo questo codice che, quando è semplificato, assomiglia a questo:
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; }
}
Ora abbiamo tre punti di vista.
1) Questo è un buon codice perché la proprietà Client dovrebbe sempre essere impostata (cioè non nulla) in modo che Client == null non si verifichi mai e il valore Id 0 denota comunque un id falso (questa è l'opinione di lo scrittore del codice; -))
2) Non puoi fare affidamento sul chiamante per sapere che 0 è un valore falso per Id e quando la proprietà Client dovrebbe sempre essere impostata devi lanciare un exception nel get quando la proprietà Client risulta essere null
3) Quando la proprietà Client deve sempre essere impostata, devi solo restituire Client.Id e lasciare che il codice lanci un'eccezione NullRef quando la proprietà Client risulta essere nulla.
Quale di questi è più corretto? O c'è una quarta possibilità?