Roslyn怀疑SyntaxTree的构造

Tig*_*ran 3 .net c# roslyn

放弃

我很确定我错过了一些明显的东西,但即使在阅读官方文档后我也不清楚Roslyn如何创建语法树.

请考虑以下简单代码:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到了一个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) 
                     {

                     }
                 }
             }
        }
Run Code Online (Sandbox Code Playgroud)

它运作得很好.

麻烦

但是,它足以为方法添加注释 ReadFromUsb(),就像这样

/// <summary>
/// Reads a data from Usb
/// </summary>
/// <returns></returns>
public bool ReadFromUsb()
{
    return true;
}
Run Code Online (Sandbox Code Playgroud)

ChildNodes()调用{1}标记的行,因为CLASS(???)返回0.

为什么在成员函数中添加注释,重置父CLASS子句语法节点的集合?

我错过了什么?

Kev*_*lch 10

在聊天讨论之后,我们确定问题是正在构建的解析代码:

string[]lines = System.IO.File.ReadAllLines(filename); 
string tocompile = string.Join(string.Empty, lines);
Run Code Online (Sandbox Code Playgroud)

这将所有代码放在一行上.因此,一切都//成为评论.解决方案只是Environment.NewLine用作连接字符,或者使用ReadAllText而不是ReadAllLines.