2016-05-31 6 views
1

Roslynで地域指令の後に変数宣言を挿入するにはどうしたらいいですか?私はこのから行くような何かをできるようにしたいと思います。これにロザリンと地域トリビアとの間にコードを挿入

class MyClass 
{ 
    #region myRegion 
    #endregion 
} 

class MyClass 
{ 
    #region myRegion 
    private const string myData = "somedata"; 
    #endregion 
} 

私は、このようにトリビアを扱うすべての例を見つけるように見えることはできません。

+1

なぜあなたは、あなたがこのスニペットを生成しようとしているどのようにいくつかのコードを提供していませんか? – SharpShade

答えて

3

#region <name>#endregionの両方は、あなたが出て分割し、代わりに作成するかを把握する必要があると思いますこれ、同じSyntaxTriviaListで終わるので、CSharpSyntaxRewriterで行うのは非常に難しいのです。すべての複雑さを気にしない最も簡単な方法は、対応するTextChangeを作成し、SourceTextを修正することです。その後

var tree = SyntaxFactory.ParseSyntaxTree(
@"class MyClass 
{ 
    #region myRegion 
    #endregion 
}"); 

// get the region trivia 
var region = tree.GetRoot() 
    .DescendantNodes(descendIntoTrivia: true) 
    .OfType<RegionDirectiveTriviaSyntax>() 
    .Single(); 

// modify the source text 
tree = tree.WithChangedText(
    tree.GetText().WithChanges(
     new TextChange(
      region.GetLocation().SourceSpan, 
      region.ToFullString() + "private const string myData = \"somedata\";"))); 

treeは次のとおりです。

class MyClass 
{ 
    #region myRegion 
private const string myData = "somedata"; 
    #endregion 
} 
+0

これはまさに私が探していたものです!ありがとう! – Andr0s

関連する問題