首页 > 解决方案 > 如何根据对象的使用有条件地保持对象属性“必需”?

问题描述

我有一个到处都在使用的对象。现在我想根据使用对象的位置,有条件地要求该对象的属性。

这是示例:

这是将在任何地方使用的对象,

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; }
}

因此,当在“Registration”中使用“Contact”类时,FristName 和 LastName 属性应该是必需的,但在“ChildContact”中使用时,这些属性应该是可选的。

请帮我完成这件事。

提前致谢。

标签: c#model-view-controllerrest

解决方案


如果您是开发人员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; }
}

推荐阅读