0

以下がオブジェクトのList<>を関数に渡し、関数が操作する各オブジェクト内でどのプロパティを使用するかを指定できるかどうかを誰かが知っていますか?

クラス全体でオブジェクトの特定のプロパティを操作するクラスがありますが、そのオブジェクトの異なるプロパティを操作するために同じクラスの複数のコピーを作成したくありません。Linqを使用することを考えましたが、操作クラスの他の関数で使用するプロパティを指定する方法がわかりません。

各プロパティを処理するために同じクラスを作成するのではなく、これを行うためのよりエレガントな方法が必要だと考えていました。Reflectionを使用して、どのプロパティを使用するかを関数に指示することを考えましたが、それは非常に速く醜くなります

疑似コードの例:

class Store
{
   int amount;
   int id;
   int serial;
}

class AggregationMethods
{
   bool Has3Values( List<Store> places /* some other param to specify which property to use*/)
   {
      // do something with Store.amount or Store.id
   }

   // other functions to work with Store.amount or Store.id or Store.serial

}
4

1 に答える 1

3

あなたの場合、それらはすべてint値です-したがって、を保持するFunc<Store, int>か、各メソッドに渡すことができます。複数のタイプを処理する必要がある場合は少し難しくなりますが、さらにコメントするのに十分な情報がありません。

また、2つに複数のインスタンス(たとえば、金額用に1つ、ID用に1つ)があると予想されるかどうか、またはこれらが本当に静的メソッドであるかどうかも明確ではありませAggregationMethods。インスタンスを使用している場合は、プロジェクションをメンバー変数として保持し、各メソッド内に適用できます。

与えたプロパティは、同じ集計を適用するのに実際には意味がない可能性があることに注意してください。たとえば、金額を合計することは意味がありますが、IDを合計することは意味がありません。

于 2012-05-29T18:14:02.393 に答える