创建函数<>罗斯林

本文关键字:罗斯林 函数 创建 | 更新日期: 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...

我不保证它会起作用,但是试试吧:)