Просто добавим немного ответа Джейсона: тщательно спроектируйте структуру, чтобы значение по умолчанию имело смысл. В качестве примера рассмотрим структуру Nullable<T>
. Желаемое поведение таково, когда вы говорите
Nullable<int> x = new Nullable<int>(); // default constructor
что результирующее значение логически равно нулю. Как мы это делаем? Структура определяется примерно так:
struct Nullable<T>
{
private readonly T value;
private readonly bool hasValue;
public Nullable(T value)
{
this.value = value;
this.hasValue = true;
}
...
Таким образом, когда запускается конструктор по умолчанию, для hasValue автоматически устанавливается значение false, а для значения устанавливается значение по умолчанию T. Обнуляемое значение, для которого hasValue установлено в значение false, рассматривается как ноль, что является желаемым поведением. Вот почему значение bool имеет значение , а не isNull .