受到this和this文章的启发,我尝试使用Roslyn创建动态函数。
然而,上述来源已过时或未完成,我无法创建功能样本。到目前为止我的工作:
var code = @"Func<int, int> 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<int, int>>(code);
Func<int, int> myFunc = submission.Execute();
但是myFunc
始终为空,我无法确定问题所在。有人可以帮助我让这个样本运行吗?
答案 0 :(得分:7)
免责声明:我实际上并没有真正使用罗斯林。
目前,您的代码声明了一个变量,但之后并没有对它做任何事情。基于this random blog post,看起来您可能只需要在声明后添加一个额外的表达式:
var code = @"Func<int, int> 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...
我不保证它会工作,但试一试:)