微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在 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 举报,一经查实,本站将立刻删除。