我有一个关于代表的问题,我在google搜索了好几天,找不到任何有用的东西可以帮助我解决问题。
好吧,我创建了一个委托,然后声明了它,但它将运行的脚本将以字符串值写入。
例如,如果字符串值为: “Console.WriteLine(” 你好“); Console.ReadKey();” 我希望委托值将其传递给代码,然后读取并执行该代码。
有人知道我该怎么办?
namespace TestScript
{
class Program
{
delegate void TestScript();
static TestScript LastScript;
static void Main(string[] args)
{
string Directory = Environment.CurrentDirectory;
string TestCode = "Console.WriteLine(\"Test\");\nConsole.ReadKey();";
TestScript script; //?
}
}
}
答案 0 :(得分:1)
Mono附带了一个C#编译器作为服务(它可以在Mono和.Net中运行),它可以在运行时评估c#代码,这是一个基于你的问题的简单示例:
public delegate void TestScript();
class Program
{
private static Evaluator _evaluator;
private static void Main(string[] args)
{
_evaluator = new Evaluator(new CompilerContext(new CompilerSettings(), new ConsoleReportPrinter()));
var test=Create("System.Console.WriteLine(\"Test\"); System.Console.ReadKey();");
var helloWorld = Create("System.Console.WriteLine(\"Hello from Script!\"); System.Console.ReadKey();");
test();
helloWorld();
}
public static TestScript Create(string script)
{
// Feed it some code
return ()=>_evaluator.Evaluate(script);
}
}
Mono.CSharp
非常灵活,有很多选项Mono C# REPL是基于这个库编写的。有关库的更多信息,请参阅Mono文档。
您可以从Nuget Mono.CSharp
PM> Install-Package Mono.CSharp
个包