我一直在基因编程类型的场景中试验 Roslyn API。这似乎是进行此类编程的好方法,但简单场景的实际实现似乎不是很简单,这意味着我可能对如何正确使用此 API 没有很好的理解。这是我在实验中尝试修改的一个简单程序:
string treeText = @"using System;
using System.Collections.Generic;
namespace TestProgram
{
class Program
{
static void Main(string[] args)
{
var myVar = 3;
string myString = ""Hello World"";
List<string> stringList = new List<string>();
Console.WriteLine(myString + myVar);
Console.ReadLine();
}
}
}";
SyntaxTree tree = SyntaxTree.ParseText(treeText);
var compilation = Compilation.Create("test.exe",
syntaxTrees: new[] { tree },
references: new[]
{
new MetadataFileReference(typeof(object).Assembly.Location),
new MetadataFileReference(typeof(Enumerable).Assembly.Location),
});
SemanticModel model = compilation.GetSemanticModel(tree);
就像一个简单的例子,假设我以某种方式“随机”决定我想使用 myString 实例插入一个新的方法调用。找出我可以从该实例调用哪些方法的有效方法是什么?那么从符号信息中创建必要的 MethodInvocationSyntax(一旦我选择了要使用的特定方法)的最佳方法是什么?我在 SemanticModel 类上找到了一个名为 ResolveOverloads 的方法,该方法出现在我需要结束的地方,但是我在找出该方法所需参数的有效路径时遇到了一些困难。这甚至是正确的下坡路吗?