Saya perlu mengubah semua properti kelas tertentu menggunakan Roslyn.
Apa cara yang disarankan untuk menerapkan lebih dari satu transformasi ke pohon sintaksis tanpa membuat referensi ke dalamnya tidak valid?
Inilah yang saya coba dan di mana saya terjebak:
Pada tahap pertama, keturunan
CSharpSyntaxWalker
mengunjungi semuaPropertyDeclarationSyntax
node, dan menyimpannya dalam daftar.Pada lintasan kedua,
CSharpSyntaxRewriter
mentransformasikan node sambil memeriksa bahwa setiap node yang dikunjungi sama dengan satu dalam daftar sebelum mengubahnya.
Masalah dengan upaya saya adalah: Ketika saya mengubah properti, saya menambahkan bidang baru ke kelas yang menyebabkan kelas bermutasi. Semua referensi dalam daftar ke properti lain menjadi tidak valid di pohon baru untuk kelas tersebut.
Tampaknya tidak efisien untuk mengunjungi kembali seluruh kelas, dan bagaimanapun saya tidak dapat mendeteksi node properti yang sudah ditangani karena perbedaan referensi.