Експериментирах с 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 (след като избера конкретен метод за използване) от информацията за символа? Намерих метод, наречен ResolveOverloads, в класа SemanticModel, който се появява там, където трябва да отида, но имам известни затруднения да измисля ефективен път към параметрите, които този метод изисква. Това ли е правилният път, по който трябва да се върви?