適切なホイールがどのように回転するかを理解できるように、ホイールを部分的に再発明して遊んでいます。
型のデフォルトコンストラクターをコンパイルして返すためのこのジェネリック関数を検討してください。
public static Func<TConcrete> Creator<TConcrete>()
{
// All checking removed for brevity
var ctor = typeof(TConcrete).GetConstructor(new Type[0]);
var lambda = Expression.Lambda<Func<TConcrete>>(Expression.New(ctor));
return lambda.Compile();
}
これにより、渡された型をインスタンス化するために使用できる、型付きのデリゲートが返されると思います。
ここで、さまざまなタイプのセットに対してこれを実行する関数が必要だと考えてください。どうすればよいでしょうか。私は...の線に沿ってthikingしていました
public static IEnumerable<Delegate> Creators(IEnumerable<Type> types)
{
foreach (var type in types)
{
var ctor = type.GetConstructor(new Type[0]);
var lamda = Expression.Lambda<Func<????>>(Expression.New(ctor));
yield return lambda.Compile();
}
}
これからわかるように、????
これは私が立ち往生した場所です。これを行う方法はありますか、それとも私のアプローチに欠陥がありますか?