使用Roslyn创建一个Func

受到本文和本文的启发,我正在尝试使用Roslyn创建一个动态函数。

然而,上述来源已过时或未完成,我无法创建function样本。 到目前为止我的工作:

var code = @"Func doStuffToInt = i => { var result = i; for (var y = i; y <= i * 2; y++) { result += y; } return result; };"; var se = new ScriptEngine(); var session = se.CreateSession(); session.AddReference(typeof(Program).Assembly); session.AddReference(typeof(Expression).Assembly); session.ImportNamespace("System"); session.ImportNamespace("System.Linq"); session.ImportNamespace("System.Linq.Expressions"); var submission = session.CompileSubmission<Func>(code); Func myFunc = submission.Execute(); 

但是myFunc总是为null,我无法确定问题所在。 有人可以帮助我让这个样本运行吗?

免责声明:我实际上并没有真正使用罗斯林。

目前,您的代码声明了一个变量,但之后没有对它做任何事情。 基于这篇随机博客文章 ,看起来您可能只需要在声明后添加一个额外的表达式:

 var code = @"Func doStuffToInt = i => { var result = i; for (var y = i; y <= i * 2; y++) { result += y; } return result; }; doStuffToInt"; // This is effectively the return statement for the script... 

我不保证它会工作,但试一试:)