0

私は次のようなクラスを持っています:

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

このクラスは、Vacanciesが次のように一般的なデータを取り込むことができるように変更する必要があります。

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

最終的に、これは多くの変更であり、これらの現在の場所の多くは、必要要員に保存されているデータのタイプについての知識がありません(理想的には知識がないはずです)。最終的に空席リストがチェックされて処理されるまで、彼らはこの情報を転送するだけです。

とにかく、RecipientEmailDetailsオブジェクトの初期化方法をどこでも変更することなく、Vacanciesに汎用データを格納するための賢い方法を探しています。箱に入れて箱から出す必要はありません。

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 が参照されている場所ではなく、Vacancy からデータを入力して抽出するときに、Vacancy の内容に明示的に関心を持つだけで済みました。

于 2012-10-11T15:03:57.197 に答える