我有一个通用类:

public class NestedDict<T>: Dictionary<string, Dictionary<string, T> { }

如图所示,我可以解析并访问它的 BaseList 并发现它的 TypeArgumentList 位于调试器中。但是,我不能简单地调用 baseType.Type.TypeArgumentList 来访问它,因为它不是我可以访问的公共(public)成员。

通常,在我的情况下,访问 TypeArgumentList 下的 Type 的正确方法是什么?或任何类型的详细信息?

最佳答案

虽然您可能知道 baseType 是一种泛型类型(所以是 GenericNameSyntax ),但这并不是唯一可能的情况,因此 BaseList 中的对象属于父类型( TypeSyntax )。

您只需要强制转换即可访问 TypeArgumentList :

var tree = CSharpSyntaxTree.ParseText("public class NestedDict<T>: Dictionary<string, Dictionary<string, T> { } ");
var cu = (CompilationUnitSyntax)tree.GetRoot();
var c = (ClassDeclarationSyntax)cu.ChildNodes().Single();

var baseDeclaration = (BaseTypeSyntax)c.BaseList.ChildNodes().Single();
var baseNameSyntax = (GenericNameSyntax)baseDeclaration.Type;
Console.WriteLine(baseNameSyntax.TypeArgumentList.Arguments[0].ToFullString());
Console.WriteLine(baseNameSyntax.TypeArgumentList.Arguments[1].ToFullString());

关于c# - Roslyn 在 {SomeSyntax}.Type 下获取详细信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31339724/

10-12 12:42