C# では、コンパイル時にあるジェネリック型を別のジェネリック型にマップする方法はありますか? この質問にリフレクションを使用することは避けたいと思います。たとえば、TypeA を TypeB にマップし、次のようなコードが機能するとします。
private void List<U> GetItemList<T>() where T : class <== U is the destination type obtained by the compile-time mapping from T to U
{
Type U = GetMappedType(typeof(T)) <=== this needs to happen during compile-time
List<U> returnList = Session.QueryOver<U>().List();
return returnList;
}
private Type GetMappedType(Type sourceType)
{
if (sourceType == typeof(TypeA))
return typeof(TypeB);
}
メソッド呼び出しを使用して型をマップしているため、コンパイル時にマッピングを実行しないことに気付きましたが、コンパイル時にのみ達成しようとしていることを達成する別の方法はありますか? 上記のコードが正しくないことはわかっていますが、私が何をしようとしているのかを理解していただければ幸いです。
要するに、ある型を別の型にマップし、C# コンパイラに型マッピングを認識させて、ジェネリック型パラメーターを受け取る任意のメソッドに対して、宛先型をジェネリック型パラメーターとして使用できるようにする方法があるかどうかを知りたいです。 . リフレクションの使用は避けたいと思います。
副次的な質問として、これにリフレクションを使用すると、実装が非常にリソースを消費することになりますか?