roslyn で生成された制御フロー グラフにはノードとしてブロック (basicblock) が含まれ、各 basicblock には 1 つ以上の命令が含まれます。複数の命令を含む基本ブロックの場合、すべての命令とそのタイプを取得しようとします。これは私が行ったことです:
var cfg = ControlFlowGraph.Create(method);
foreach(var block in cfg.Blocks)
{
foreach(var operation in block.Operations)
{
var syntax = operation.Syntax;
Console.WriteLine(syntax.Kind());
}
}
次のメソッドの場合:
public int method(int x, int y)
{
y = 10;
x = y;
return x + y;
}
私は結果を得る:
ExpressionStatement
ExpressionStatement
しかし、私は正確な命令を取得しx = y;
たいと思っています。たとえば、取得したい命令のタイプですAssignmentExpressionSyntax
。また、そのタイプに応じて、各命令でいくつかの操作を実行したいと考えています。