У нас есть этот код, который при упрощении выглядит следующим образом:
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никогда не происходило, и значение 0Id в любом случае обозначает ложный Id (это мнение автора кода ;-))
2) Вы не можете полагаться на то, что вызывающая сторона знает, что 0это ложное значение, Idи когда Clientсвойство всегда должно быть установлено, вы должны бросить exceptionв, getкогда Clientсвойство оказывается пустым
3) Когда Clientсвойство всегда должно быть установлено, вы просто возвращаетесь Client.Idи позволяете коду генерировать NullRefисключение, когда Clientсвойство оказывается пустым.
Что из этого является наиболее правильным? Или есть четвертая возможность?