Отказ от ответственности
Я почти уверен, что упускаю что-то очевидное, но даже после прочтения официальной документации я не совсем понимаю, как Рослин создает синтаксическое дерево.
Пример
Рассмотрим следующий простой код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace aopsample
{
class UsbReadWriter
{
public bool ReadFromUsb()
{
return true;
}
public virtual bool WriteToUsb()
{
return true;
}
}
}
Я получаю SyntaxTree
для этого кода и делаю что-то вроде этого, очень грубое и простое, ноМне просто нужно понять.
string[]lines = System.IO.File.ReadAllLines(filename);
string tocompile = string.Join(string.Empty, lines);
SyntaxNode root = tree.GetRoot(new CancellationToken());
foreach (SyntaxNode sn in root.ChildNodes())
{
if (sn.Kind == SyntaxKind.NamespaceDeclaration)
{
//I get a namespace, so it's Child node just will be class
foreach (SyntaxNode sname in sn.ChildNodes())
{
if (sname.Kind == SyntaxKind.ClassDeclaration)
{
//I get class, so it's Children will be methods of the class
foreach (SyntaxNode sclass in sname.ChildNodes()) // **{1}**
{
if (sclass.Kind == SyntaxKind.MethodDeclaration)
{
}
}
}
}
И это работает довольно хорошо.
Проблема
Но достаточно добавить комментарий к методу ReadFromUsb()
, что-то вроде этого
/// <summary>
/// Reads a data from Usb
/// </summary>
/// <returns></returns>
public bool ReadFromUsb()
{
return true;
}
И ChildNodes()
вызов {1} отмеченстрока, для CLASS (???) возвращает 0.
Вопрос
Зачем добавлять комментарий к функции-члену, сбрасывает коллекцию родительских дочерних узлов синтаксиса CLASS?
Чего мне не хватает?