1

を実装する汎用メソッドと 4 つのクラスを作成しようとしていますIDetail。各クラスには、 を実装するクラスのコレクションがありますITaxes。各クラスのコレクションにアクセスできるジェネリック メソッドを作成したいと考えています。

このようなもの:

public void UpdateCollection<T,I>(T Detail,Taxes TaxesList ) where T:IDetail where I:Itaxes
{
   foreach( Taxes  tax in TaxesList)
   {
       Detail.I.Add(tax);
   } 
} 

Itype のtypeのプロパティにアクセスしたいT。どうやってやるの?可能です?クラスごとに 1 つのメソッドを記述する必要がありますか?

4

2 に答える 2

4

理想的には、インターフェイスの一部としてオブジェクトIDetailのリストを含めるようにインターフェイスを変更します。ITaxes公開されている名前付きプロパティに詳細ごとに異なる名前を付ける場合は、明示的なインターフェイスの実装を使用できます。

それが不可能な場合、または他の理由で意味がない場合、おそらく最善の策は、このメソッドFunc<T, I>にこのメソッドへのパラメーターを受け入れさせることです。次に、ユーザーは、各Tオブジェクトから必要なリストを抽出できるようにするメソッドを提供できます。

public void UpdateCollection<T, I>(T Detail, Taxes TaxesList, Func<T, I> taxSelector)
    where T : IDetail
    where I : Itaxes
{
    I taxList = taxSelector(Detail);
    foreach (Taxes tax in TaxesList)
    {
        taxList.Add(tax);
    }
}

呼び出し元は、ラムダを使用してそのオブジェクトの適切なプロパティを定義できます。

于 2013-10-14T16:58:07.653 に答える
0

求めるものの共通性を明らかにする第 3 のインターフェイスを作成します。部分クラス (生成された場合) でインターフェイスをサブスクライブし、ジェネリック メソッド内でそのインターフェイスのみを受け入れ、それに応じて処理します。

于 2013-10-14T18:01:50.567 に答える