【发布时间】:2012-06-21 16:55:29
【问题描述】:
我一直在玩,部分地重新发明轮子,以便了解正确的轮子是如何旋转的。
考虑用这个泛型函数来编译和返回一个类型的默认构造函数。
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();
}
我相信这会给我返回一个很好的类型化委托,我可以用它来实例化传递的类型。
现在考虑一下,我想要一个可以为一组不同类型执行此操作的函数,我该怎么做?我的想法是……
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();
}
}
正如您从???? 中看到的那样,这就是我被卡住的地方。有没有办法做到这一点,还是我的方法有缺陷?
【问题讨论】:
-
调用
Creators方法并使用返回的委托的代码看起来如何? -
@dtb,该代码实际上并不存在,我的程序实际上有一个函数,它需要一个
IEnumerable<KeyValuePair<Type, Type>>来传递接口和具体实现之间的关联,但是,我认为这对我的实际问题是多余的.
标签: c# reflection delegates lambda