2016-04-09 1 views
2

Наша цель - построить абстрактное синтаксическое дерево игрушек для классов C# с использованием Roslyn. Мы просто хотим показать основную структуру класса, а не ходить по всему АСТ. Например (Взято из MSDN):Извлечение кода как чистой строки из API Roslyn

class TimePeriod 
{ 
    private double seconds; 

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

Давайте только рассматривать недвижимость Hours; нас интересует только извлечение токенов для модификатора (public), тип возврата (double), идентификатор (Hours), как для тела двух аксессуаров, мы хотим непосредственно извлечь его как String.

Однако, когда мы проходим через рослин (показано на экранном дампе), когда мы получаем тело аксессора, мы не находим поле, представляющее всю строку. Каков правильный способ достижения этого?

+0

Похоже, вы упустили очевидное ... просто назовите '.ToString()' на узле AST :) –

+0

@LucasTrzesniewski, серьезно, позвольте мне попробовать .... спасибо большое! Уже потрачено впустую почти полчаса. – user1935724

+0

Приветствую вас, я на самом деле написал ответ, так как оказалось, что есть несколько способов сделать это. –

ответ

3

Очевидный способ назвать ToString:

Возвращает строковое представление этого узла, не включая его передней и задней пустяки.

Если вы хотите, начальные и конечные мелочи (пробельные, комментарии, ...), есть ToFullString:

Возвращает полное строковое представление этого узла, включая его ведущие и замыкающие мелочи.

В целях повышения эффективности, вы также можете быть заинтересованы в WriteTo методе, который пишет, что ToFullString будет производить до TextWriter, избегая промежуточные строки распределения:

Записывает полный текст этого узла на указанный TextWriter.

Смежные вопросы