我有一个课程如下:
public class RecipientEmailDetails
{
public string Name { get; set; }
public string Email { get; set; }
public List<VacancyEmailDetails> Vacancies { get; set; }
}
需要更改此类以允许职位空缺采用通用数据,例如:
public class RecipientEmailDetails<T>
{
public string Name { get; set; }
public string Email { get; set; }
public List<T> Vacancies { get; set; }
}
不幸的是,目前如果我这样做,我需要更改实例化此类(这是很多很多位置)的所有代码,以包含这个新的泛型类型,例如更改它:
List<RecipientEmailDetails> recipientEmailDetails = wrapper.GetRecipientEmails(emailCount);
对此:
List<RecipientEmailDetails<VacancyEmailDetails> recipientEmailDetails = wrapper.GetRecipientEmails(emailCount);
最终,这是一个很大的变化,许多当前的位置将不知道(并且理想情况下应该不知道)Vaconcies中存储的数据类型。他们将简单地转发此信息,直到最终检查和处理空缺列表。
无论如何切入追逐我正在寻找在Vaconcies中存储通用数据的巧妙方法,而无需在任何地方更改RecipientEmailDetails对象的初始化方式。我宁愿不必将它装箱并拆箱。
我应该补充说VacancyEmailDetails目前是这样的:
public class VacancyEmailDetails
{
public string Id { get; set; }
public string Name { get; set; }
public string Location { get; set; }
public string Salary { get; set; }
public string Notes { get; set; }
}
在所有情况下,空缺将被要求保留与此类似的对象,即主要是数据成员的方法很少或很少。但是,这些成员的数量,名称和类型会有很大差异。
答案 0 :(得分:1)
引入接口IRecipientEmailDetails
,让您的类实现它并更改GetRecipientEmails
方法以返回此接口。
public interface IRecipientEmailDetails {}
你班上的方法:
public IRecipientEmailDetails GetRecipientEmails(string emailCount) { }
无论如何,您都必须更改代码。
答案 1 :(得分:1)
您可以使用界面来定义允许的内容,例如:
public class RecipientEmailDetails
{
public string Name { get; set; }
public string Email { get; set; }
public List<ISomeCommonInterface> Vacancies { get; set; }
}
所有课程都实现了这一点。
答案 2 :(得分:0)
感谢您的回复。我决定反对接口,而是将类重新定义为:
public class RecipientEmailDetails
{
public string Name { get; set; }
public string Email { get; set; }
public List<Dictionary <string, string>> Vacancies { get; set; }
}
唯一必须改变的地方就是这些:
new RecipientEmailDetails{
Name = "Test1",
Email = "Test@hotmail.com",
Vacancies = vacancies.Select(z => new VacancyEmailDetails{
Id = z.Id.ToString(),
Notes = z.Notes
}).ToList()};
对于这些:
new RecipientEmailDetails{
Name = "Test1",
Email = "Test@hotmail.com",
Vacancies = vacancies.Select(z => new []{
new {Key = "Id", Value = z.Id.ToString()},
new {Key = "Notes", Value = z.Notes}}.ToDictionary(d => d.Key, d => d.Value)).ToList()})
这使我能够按照我的要求行事,只需要在填充和提取数据时明确关注职位空缺的内容,而不是引用RecipientEmailDetails。