Как сохранить свойство объекта «Обязательное» условно в зависимости от использования объекта? - PullRequest
0 голосов
/ 09 мая 2020

У меня есть один объект, который используется везде. Теперь я хочу, чтобы свойства этого объекта требовались условно, в зависимости от того, где используется объект.

Вот пример:

Вот объект, который будет использоваться везде,

public class Contact
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}

Теперь у меня есть еще один класс, в котором указанный выше объект используется как свойство,

public class Registration
{
    public Contact ContactDetails { get; set; }
    public List<ChildContact> ChildContact { get; set; }
}

Теперь есть класс «ChildContact», в котором класс «Contact» также используется как свойство ,

public class ChildContact
{
    public Contact Contact { get; set; }
    public int NoOfStudents { get; set; }
}

Поэтому, когда класс «Contact» используется в «Registration», свойства FristName и LastName должны быть обязательными, но когда он используется в «ChildContact», эти свойства должны быть необязательными.

Пожалуйста, помогите мне это сделать.

Заранее спасибо.

1 Ответ

0 голосов
/ 09 мая 2020

ЕСЛИ вы разработчик Contact, а другие используют вашу библиотеку для своих Registration и ChildContact, нет возможности контролировать использование. В лучшем случае вы можете создать отдельные интерфейсы / классы для принудительного / невыполнения Contact.

Если вы контролируете полный исходный код и просто хотите дважды проверить себя, предоставьте сеттер, который будет проверять, были ли эти поля назначены .

public class Registration
{
    private Contact _contactDetails;
    public Contact ContactDetails
    {
        get => _contactDetails;
        set
        {
            if (value == null) throw new NullReferenceException("...");
            if (value.FirstName == null || value.FirstName == string.Empty) throw new ArgumentException("Provide first name.");
            if (value.LastName == null || value.LastName == string.Empty) throw new ArgumentException("Provide last name.");
            _contactDetails = value;
        }
    }
    public List<ChildContact> ChildContact { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...