2

需要使用 Roslyn查找TypeSyntax或基本上属于类中的特定字段。 像这样的东西:Type

rootSyntaxNode
.DescendantNodes()
.OfType<FieldDeclarationSyntax>()
.First(x => x.Identifier="fieldName")
.GivemeTypeSyntax()

但无法获得有关如何在 FieldDeclarationSyntax 节点中访问 Identifier 和 SyntaxType 的任何提示。请问有什么想法吗?

4

1 回答 1

6

部分问题是字段可以包含多个变量。您将查看Declaration类型和Variables标识符。我想这就是你要找的:

var tree = CSharpSyntaxTree.ParseText(@"
class MyClass
{
    int firstVariable, secondVariable;
    string thirdVariable;
}");

var mscorlib = MetadataReference.CreateFromFile(typeof(object).Assembly.Location);
var compilation = CSharpCompilation.Create("MyCompilation",
    syntaxTrees: new[] { tree }, references: new[] { mscorlib });

var fields = tree.GetRoot().DescendantNodes().OfType<FieldDeclarationSyntax>();

//Get a particular variable in a field
var second = fields.SelectMany(n => n.Declaration.Variables).Where(n => n.Identifier.ValueText == "secondVariable").Single();
//Get the type of both of the first two fields.
var type = fields.First().Declaration.Type;
//Get the third variable
var third = fields.SelectMany(n => n.Declaration.Variables).Where(n => n.Identifier.ValueText == "thirdVariable").Single();
于 2015-10-29T17:21:05.670 回答