Вызвать исключение, если значения не установлены при инициализации - PullRequest
0 голосов
/ 19 июня 2020

Я разработал много таких моделей:

public class Book
{
    public string Title { get; set; }
    public int PageCount { get; set; }
    public bool SecondHand { get; set; }
}

Такая «неполная» инициализация не вызывает исключений компилятора:

new Book
{
    Title = "Welcome to the The"
}

Но я бы хотел это приведет к ошибке во время компиляции, потому что несколько полей, не допускающих значения NULL (int not int?), не инициализированы.

Как я могу проектировать модели, чтобы при создании экземпляра не удалось инициализировать Обнуляемые поля вызывают ошибки во время компиляции?

(И предотвращает компиляцию)


Мне нравится использовать синтаксис создания экземпляра new Book { ... } вместо конструктора new Book(...), потому что я могу видеть все имена полей, представленные передо мной, очень наглядно.

Если возможно, я хотел бы найти решение, которое может это сохранить.

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Вы можете потребовать, чтобы обязательные свойства устанавливались через конструктор. Например, если PageCount является обязательным:

public class Book
{
    public Book(int pageCount)
    {
      this.PageCount = pageCount;
    }

    public string Title { get; set; }
    public int PageCount { get; }
    public bool SecondHand { get; set; }
}

Теперь вы не сможете создать экземпляр Book без его правильной инициализации.

Теперь вы можете сказать:

new Book(10)
{
  Title = "Welcome to the The"
}

Если вы хотите быть более явным, вы можете использовать именованные параметры:

new Book(pageCount : 10)
{
  Title = "Welcome to the The"
}

В приведенном выше примере, если вы хотите сделать PageCount изменяемым после того, как он был инициализируется в конструкторе, тогда вы можете дать ему установщик publi c, но все же потребуется инициализация через конструктор.

0 голосов
/ 19 июня 2020

Единственный способ избежать этого - запретить другой синтаксис. Это возможно, просто избегая конструктора по умолчанию:

public class Book
{
    public Book(string title, int PageCount, bool secondHand) { ... }
    public string Title { get; set; }
    public int PageCount { get; set; }
    public bool SecondHand { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...