我有以下代码:
var factory = Expression.Parameter(typeof(FooFactory));
var fooInstance = Expression.Variable(typeof(Foo));
var factoryCall = Expression.Call(factory, "Instantiate", new[] { typeof(Foo) });
Expression.Assign(fooInstance, factoryCall);
List<Expression> expressions = new List<Expression>();
// TODO : add more expressions to do things on fooInstance ...//
expressions.Add(fooInstance); //return fooInstance
Expression finalExpr = Expression.Block(new[] { fooInstance }, expressions);
它应该做什么:
Instantiate<T>()
方法。问题是:当我编译并调用表达式时,从不调用Instantiate()。返回的值始终为null:
var method = Expression.Lambda<Func<FooFactory, Foo>>(finalExpr, factory).Compile();
Foo foo = method(new FooFactory()); //foo is null :(
答案 0 :(得分:0)
我的坏。我忘了Expression.Assign()
会返回一个表达式。
当这样做时,它可以很好地运作:
List<Expression> expressions = new List<Expression>();
expressions.Add(Expression.Assign(fooInstance, call));
感谢Luaan的提示。