【发布时间】:2014-08-29 12:58:56
【问题描述】:
我正在尝试了解 Roslyn 编译器的工作原理。
我正在尝试编写简单的函数,它将分析代码并将循环语句从增加变为减少。
例如更改:
for(int i=0; i<10; i++)
int a = i;
到:
for(int i=9; i>=0; i--)
int a=i;
我已经编写了很早的代码来查找该循环,但我不知道如何编辑它。
这是我到目前为止所做的:
SyntaxTree tree = CSharpSyntaxTree.ParseText(
@"using System;
using System.Collections.Generic;
using System.Text;
static void Main(string[] args)
{
for(int i=0; i<10; i++)
int a = i;
}");
var root = (CompilationUnitSyntax)tree.GetRoot();
IEnumerable<ForStatementSyntax> forStatementSyntaxs = root.DescendantNodes().OfType<ForStatementSyntax>();
ForStatementSyntax forStatementSyntax = forStatementSyntaxs.First();
ExpressionSyntax expressionSyntax = forStatementSyntax.Incrementors.First();
我想知道如何使用 Roslyn 的“for loop”声明进行更改。此外,如何更改该循环包含的表达式。
【问题讨论】:
-
你有什么问题?
-
如何使用 Roslyn 'for loop' 声明进行更改。此外,如何更改该循环包含的表达式。