private Func GenerateWriter()
{
MethodInfo appendMethod = typeof(StringBuilder).GetMethod("Append",
new[] { typeof(string) });
var buffer = Expression.Variable(typeof(StringBuilder), "buffer");
var writer = new List<Expression>();
var source = Expression.Parameter(typeof(string[]));
writer.Add(Expression.Assign(buffer, Expression.New(typeof(StringBuilder))));
//add some strings to buffer
writer.Add(Expression.Call(buffer, "ToString", null));
var f = Expression.Lambda<Func<string[], string>>
(Expression.Block(writer.ToArray()), source).Compile();
return f;
} 我收到了这样的消息: 'System.Text.StringBuilder'类型的变量'缓冲区' 引用范围'',但未定义
我不明白错误是什么。一切似乎都是正确的。 请帮帮我!答案 0 :(得分:3)
我认为问题在于您致电Expression.Block
。您需要指定块声明的变量:
Expression.Block(new[] { buffer }, writer)
试一试。 (我删除了ToArray
调用,因为重载需要IEnumerable<Expression>
。)