免责声明
我很确定我遗漏了一些明显的东西,但是即使在阅读了官方文档之后,我也不清楚 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;
}
}
}
我得到了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 子语法节点的集合?
我错过了什么?