2016-04-09 6 views
2

私たちの目標は、Roslynを使用してC#クラス用の抽象構文ツリーを構築することです。 AST全体を歩くのではなく、クラスの基本構造を見せたいだけです。例えば(MSDNから撮影):Roslyn APIから純粋な文字列としてコードを抽出

class TimePeriod 
{ 
    private double seconds; 

    public double Hours 
    { 
     get { return seconds/3600; } 
     set { seconds = value * 3600; } 
    } 
} 

は私たちが唯一の財産Hours考えてみましょう。 Stringとして直接抽出したい2つのアクセサの本体については、修飾子(public)、戻り値の型(double)、識別子(Hours)のトークンを抽出することにのみ関心があります。

しかし、アクセッサの身体を取得するときにroslyn(画面のダンプに表示されます)を歩くと、文字列全体を表すフィールドが見つかりませんでした。これを達成する正しい方法は何ですか?

+0

が見える...ちょうどASTノードに '.ToString()'を呼び出す:) –

+0

@LucasTrzesniewski、真剣に、私は試してみましょう....おかげでたくさん!すでに30分近く浪費されています。 – user1935724

+0

これを行うにはいくつかの方法があることが判明したので、私は実際に答えを書きました。 –

答えて

3

明白な方法はToStringを呼び出すことです:

その先頭と末尾雑学を含めない、このノードの文字列表現を返します

あなたは先頭と末尾のトリビア(空白、コメントを、...)したい場合は、ToFullStringがあります。その先頭と末尾トリビアなど、このノードの

返しフル文字列表現。効率の目的のために

、あなたはまた、中間の文字列の割り当てを避け、ToFullStringTextWriterに生じるであろうものを書き込んWriteTo方法、に興味がある可能性があり:

は、このノードの完全なテキストを書き込みます指定されたTextWriter。あなたは明白なことを見落としよう

関連する問題