从范围''引用的表达式'System.Text.StringBuilder'的变量'buffer'的问题,但它没有定义

时间:2010-07-20 18:09:25

标签: c#

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'类型的变量'缓冲区' 引用范围'',但未定义

我不明白错误是什么。一切似乎都是正确的。 请帮帮我!

1 个答案:

答案 0 :(得分:3)

我认为问题在于您致电Expression.Block。您需要指定块声明的变量:

Expression.Block(new[] { buffer }, writer)

试一试。 (我删除了ToArray调用,因为重载需要IEnumerable<Expression>。)