当我有了这个,
public static object Create()
{
return new object();
}
这有效:
var m = typeof(Class).GetMethod("Create");
var e = Expression.Call(m);
Func<object> f = Expression.Lambda<Func<object>>(e).Compile();
但是当我有了这个,
public static object Create(Type t)
{
return new object();
}
这失败了:
var m = typeof(Class).GetMethod("Create");
var e = Expression.Call(m, Expression.Parameter(typeof(Type)));
var t = Expression.Parameter(typeof(Foo));
Func<object> f = Expression.Lambda<Func<object>>(e, t).Compile();
我得到System.Core.dll 中出现“System.ArgumentException”类型的未处理异常。附加信息:为 lambda 声明提供的参数数量不正确。该参数t
只是一个虚拟类型的表达式Foo
。我认为这无关紧要。我在这里哪里出错了?