在 Roslyn CSharpScript 中执行一个方法并传递参数而不必将它们作为字符串或通过全局变量传递?

问题描述

用户在我们的产品中创建 C# script 时,我发现发送参数的唯一方法是通过“globals”参数。调用代码是这样的,它确实有效:

public class ArgsWrapper
{        
    public Dictionary<string,object> Args = new Dictionary<string,object>();
}

string code = @"
   return AddStuff((int)Args["x"],(int)Args["y"]);

   private int AddStuff(int x,int y)
   {
      return x + y;
   }";

var script = csharpscript.Create(code,globalsType: typeof(ArgsWrapper));
args["x"] = 5;
args["y"] = 10;
var res = script.RunAsync(globals: new ArgsWrapper { Args = args }).Result.ReturnValue;

但是,这是一种必须传递参数的非常糟糕的方式。像这样的问题的所有样本和回答似乎都在说“这很容易,就这样做”:

res = script.ContinueWith("return AddStuff(5,10);");

如果您尝试传递可以转换为字符串的原语,这非常有效……但是如果您想传递 DataTable 或 List 或类似的东西怎么办?

就像我说的那样有效,但它阻止我询问用户“您的入口函数是什么”,然后执行诸如使用反射来获取方法并能够将参数传递给方法之类的操作。我知道认为有办法做到这一点可能是一个白日梦,但我不得不问,以防万一我遗漏了一些明显的东西,而这实际上是可以做到的。

#endrant...感谢收听:-)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)