Мне нужно преобразовать все свойства определенного класса с помощью Roslyn.
Каков рекомендуемый способ применения нескольких преобразований к синтаксическому дереву без аннулирования ссылок на него?
Вот что я пробовал и где я застрял:
На первом проходе потомок
CSharpSyntaxWalker
посещает все узлыPropertyDeclarationSyntax
и сохраняет их в списке.Во втором проходе
CSharpSyntaxRewriter
преобразует узлы, проверяя, что каждый посещенный узел равен единице в списке перед его преобразованием.
Проблема с моей попыткой заключается в следующем: когда я преобразую свойство, я добавляю новые поля в класс, что приводит к изменению класса. Все ссылки в списке на другие свойства становятся недействительными в новом дереве для класса.
Повторное посещение всего класса кажется неэффективным, и в любом случае я не могу обнаружить уже обработанные узлы свойств из-за разницы в ссылках.