首页 > 解决方案 > 如何使用 C# ScriptEngine 在类中执行方法

问题描述

我怎样才能得到这个来源的结果

var src = @"public class Test
{
    public IList<string> CallMe(int count = 10)
    {
        return Enumerable.Range(0, count).Select(x => $""Number-{x}"").ToList();
    }
}";

由 C# 中的 Roslyn ScriptEngine 编写?

我怎样才能做到这一点?

object result = await CSharpScript.EvaluateAsync("new Test().CallMe(20)");

标签: c#roslyn

解决方案


一种方法是使用 Roslyn Scripting 中的延续来保持先前的执行状态:

var src = @"public class Test
{
    public IList<string> CallMe(int count = 10)
    {
        return Enumerable.Range(0, count).Select(x => $""Number-{x}"").ToList();
    }
}";

var options = ScriptOptions.Default
    .AddReferences("mscorlib", "System.Core") // assume that it's run under .netframework
    .AddImports("System", "System.Linq", "System.Collections.Generic");

var list = CSharpScript.RunAsync(src, options).Result
                       .ContinueWithAsync<IList<string>>("new Test().CallMe(20)").Result.ReturnValue;

推荐阅读