public Func<double> Compile(Block block) { ParameterExpression result = Expression.Parameter(typeof(int), "result"); var compiler = new ExpressionGenerator(); compiler.SetReturnType<double>(); foreach (var varDef in block.Variables.Values) { //var v = Expression.Variable(ExpressionCompiler.GetCsType(varDef.ValueType), varDef.Name.Name); //expressions.Add(v); compiler.AddVariable(varDef); } foreach (var statement in block.Statements) { compiler.AddExpression(statement); } BlockExpression blockExpression = compiler.Generate(); var lambda = Expression.Lambda<Func<double>>(blockExpression); var compiled = lambda.Compile(); return compiled; }