创建函数<>罗斯林
本文关键字:罗斯林 函数 创建 | 更新日期: 2023-09-27 17:50:45
受到这篇文章的启发,我尝试用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
总是null,我无法确定问题在哪里。有人能帮我试制一下样品吗?
免责声明:我并没有在生气的时候经常使用Roslyn。
当前你的代码声明了一个变量,但是之后没有对它做任何事情。根据这篇随机的博客文章,看起来您可能只需要在声明后添加一个额外的表达式:
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...
我不保证它会起作用,但是试试吧:)