Хобрук: Ваш путь к мастерству в программировании

Извлечение кода в виде чистой строки из Roslyn API

Наша цель — построить игрушечное абстрактное синтаксическое дерево для классов C# с помощью Roslyn. Мы просто хотим показать базовую структуру класса, а не проходить весь AST. Например (взято из MSDN):

class TimePeriod  
{
  private double seconds;

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

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

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


  • Похоже, вы упустили из виду очевидное... просто вызовите .ToString() на узле AST :) 10.04.2016
  • @LucasTrzesniewski, серьезно, позвольте мне попробовать.... большое спасибо! Уже потратил почти полчаса. 10.04.2016
  • Не за что, я действительно написал ответ, так как оказалось, что это можно сделать несколькими способами. 10.04.2016

Ответы:


1

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

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

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

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

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

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

09.04.2016
Новые материалы

Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

«Очень простой» эволюционный подход к обучению с подкреплением
В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

Фишинг — Упаковано и зашифровано
Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

ВЫ РЕГРЕСС ЭТО?
Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

Не зря же это называют интеллектом
Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

LeetCode Проблема 41. Первый пропущенный положительный результат
LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..