2010-07-20 38 views
1

問題的表達式類型的變量「緩衝」「System.Text.StringBuilder」從範圍「引用」,但它沒有定義

 
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' 引用範圍'',但它沒有定義

我不明白是什麼錯誤。一切似乎都正確。 請幫幫我!

回答

3

我相信問題在於您撥打Expression.Block。您需要指定由塊聲明的變量:

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

給一個嘗試。 (我刪除了ToArray電話,因爲有一個過載需要IEnumerable<Expression>。)

+0

謝謝!有用! – Roman 2010-07-20 18:28:26

相關問題