c# - 如何根据对象的使用有条件地保持对象属性“必需”?
问题描述
我有一个到处都在使用的对象。现在我想根据使用对象的位置,有条件地要求该对象的属性。
这是示例:
这是将在任何地方使用的对象,
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”中使用时,这些属性应该是可选的。
请帮我完成这件事。
提前致谢。
解决方案
如果您是开发人员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; }
}
推荐阅读
- latex - Latex 多行多列表
- r - 如何将沿线的简单特征点转换为带端点的线段
- python - 将复杂列表隐藏到平面列表
- c# - 更新 ASP.net 服务器中的类后,所有用户的会话在浏览器中重置
- python - TensorFlow 无法将字符串类型的张量复制到设备
- sql - 如何从同一个表中选择不同的 2 个相同的列
- python - “ImportError:导入 pydot 失败。您必须安装 pydot 和 graphviz 才能使 `pydotprint` 工作。” 但是两者都安装了
- c - 如何将值传递给结构的指针成员
- c# - 通过从 appsettings.json 读取文件路径来创建文件会自动将我的项目的根目录添加到路径中
- android - RecyclerView 适配器中的错误 - 错误膨胀图像视图类