これは少し長い質問ですので、ご容赦ください。
文字列のセットと、各文字列に対応するジェネリックメソッド呼び出しとの間にマッピングを作成する必要があります。しかし、私はコンパイルの問題に遭遇しました、下の方で説明しました。
私のシナリオでは、を使用していますDictionary<>
が、問題は。にも同様に存在しList<>
ます。簡単にするためList<>
に、以下の例ではaを使用しています。
次の3つのクラスを検討してください。
public abstract class MyBase { /* body omitted */ }
public class MyDerived1 : MyBase { /* body omitted */ }
public class MyDerived2 : MyBase { /* body omitted */ }
そして、他のクラスのメソッド:
public class Test
{
public T GetT<T>() where T : MyBase { /* body omitted */ }
}
List<Func<MyBase>>
別のクラスでは、次のように宣言できます。
public class SomeClass
{
public void SomeFunc()
{
var test = new Test();
var list1 = new List<Func<MyBase>>
{
test.GetT<MyDerived1>,
test.GetT<MyDerived2>
};
}
}
これはすべて問題ありません。
しかし、次のようなジェネリッククラスを返す関数が必要な場合はどうなりますか?
public class RetVal<T> where T : MyBase { /* body omitted */ }
public class Test
{
public RetVal<T> GetRetValT<T>() where T : MyBase
{
return null;
}
}
List<>
そして、この関数を使用して同等のものを作成したいと思います。つまり、リスト>>?
public class Class1
{
public void SomeFunc()
{
var test = new Test();
var list2 = new List<Func<RetVal<MyBase>>>
{
test.GetRetValT<MyDerived1>, // compile error
test.GetRetValT<MyDerived2> // compile error
};
}
}
のコンパイルエラーが発生しExpected a method with 'RetVal<MyBase> GetRetValT()' signature
ます。
それで、これを回避する方法はありますか、または文字列を作成するために使用できる代替アプローチがあります...ジェネリックメソッド呼び出しマッピング?