【问题标题】:Problem with expressions variable 'buffer' of type 'System.Text.StringBuilder' referenced from scope '', but it is not defined从范围“”引用的“System.Text.StringBuilder”类型的表达式变量“缓冲区”存在问题,但未定义
【发布时间】:2010-07-20 18:09:25
【问题描述】:

私有函数 GenerateWriter() { MethodInfo appendMethod = typeof(StringBuilder).GetMethod("Append", 新[] { 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”类型的变量“缓冲区” 从范围''引用,但未定义

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

【问题讨论】:

    标签: c#


    【解决方案1】:

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

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

    试试看。 (我删除了ToArray 调用,因为有一个需要IEnumerable&lt;Expression&gt; 的重载。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      相关资源
      最近更新 更多