0

我有一堂课如下:

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

最终,这是很多变化,并且这些当前位置中的许多将不知道(理想情况下应该不知道)什么类型的数据存储在空缺中。他们将简单地转发此信息,直到最终检查和处理空缺列表。

无论如何,切入正题,我正在寻找将通用数据存储在 Vacancy 中的巧妙方法,而不必在任何地方更改 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; }
}

在所有情况下,都需要空位来保存与此类似的对象,即主要是具有很少或很少方法的数据成员。然而,这些成员的数量、名称和类型会有很大差异。

4

3 回答 3

1

引入一个接口IRecipientEmailDetails,让你的类实现它并改变GetRecipientEmails方法来返回这个接口。

public interface IRecipientEmailDetails {}

以及您班级中的方法:

public IRecipientEmailDetails GetRecipientEmails(string emailCount) { } 

一种或另一种方式,您将不得不更改您的代码。

于 2012-10-11T12:14:19.287 回答
1

您可以使用接口来定义允许的内容,例如:

public class RecipientEmailDetails
{
    public string Name { get; set; }
    public string Email { get; set; }
    public List<ISomeCommonInterface> Vacancies { get; set; }
}

所有类都实现了这一点。

于 2012-10-11T12:15:33.857 回答
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 的地方。

于 2012-10-11T15:03:57.197 回答