2009-05-29 8 views
0

異なるタイプの汎用リストをパラメータとして使用するメソッドをオーバーロードするにはどうすればよいですか?例えば異なるタイプの汎用リストをパラメータとして受け取るメソッドのオーバーロード

private static List<allocations> GetAllocationList(List<PAllocation> allocations) 
{ 
    ... 
} 

private static List<allocations> GetAllocationList(List<NPAllocation> allocations) 
{ 
    ... 
} 

私は一つにこれらの2つの方法を組み合わせることができます方法はあり:

私はそうのような二つの方法がありますか?

答えて

4

ジェネリックを使用していますか?

private static List<allocations> GetAllocationList<T>(List<T> allocations) 
    where T : BasePAllocationClass 
{ 

} 

これは、「BasePAllocationClass」と呼ばれるいくつかの基本クラスを、あなたの「配分」、「PAllocation」ことを前提と「NPAllocation」すべての共有。それ以外の場合は、 "where"制約を削除して、型チェックを自分で行うことができます。

+0

を私はあなたの提案を使用していますが、どのように私は型チェックをやって行くのですか? また、allocationsパラメータを反復処理する必要があります。私はallocations.ForEach(代理人(PAllocation PA){...})を使用しようとしました。互換性のない匿名関数の署名というエラーが表示されます。何か案は? – Jon

+0

あなたは(foreach varを割り当てるだけで)できないのですか? – womp

1

PAllocationとNPAllocationが共通のインタフェースまたは基本クラスを共有する場合、それらの基本オブジェクトのリストを受け入れるだけのメソッドを作成できます。

しかし、そうではないにもかかわらず、2つ(またはそれ以上)のメソッドを1つにまとめるには、ジェネリックを使って行うことができます。メソッド宣言のようなものだった場合:

private static List<allocations> GetCustomList<T>(List<T> allocations) 
{ 
    ... 
} 

、あなたが使用してそれを呼び出すことができます。

GetCustomList<NPAllocation>(listOfNPAllocations); 
GetCustomList<PAllocation>(listOfPAllocations); 
+0

の部分は、型が自動的に推測されるため省略することができます – configurator

関連する問題