使用Roslyn创建一个Func <>

gsh*_*arp 4 .net c# 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();
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 7

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

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

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...
Run Code Online (Sandbox Code Playgroud)

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

  • 因为怀疑Jon Skeet而感到羞耻:) (3认同)