委托和字符串的问题

时间:2014-12-22 04:30:11

标签: c# string delegates

我有一个关于代表的问题,我在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; //?
        }
    }
}

1 个答案:

答案 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个包