对于不同类型的符号,从Microsoft.CodeAnalysis.ISymbol获取System.Type的最佳通用方法是什么?(例如类声明,变量,属性等)
我希望能够对类型进行各种检查,例如检查类型是否实现任何接口,或者是否可以转换为任何接口,就像可以检查System.Type一样.
我遇到的问题是,用于表示符号的大多数具体类都是内部的(请参阅http://source.roslyn.io/),我在ISymbol中找不到tye类型信息.
我使用以下代码检索ISymbol
var objectSymbol = (ISymbol)model.GetDeclaredSymbol(obj.Node);
Run Code Online (Sandbox Code Playgroud) 我有一个ITypeSymbol嵌套类型 ( MyNamespace.MyOuter.Nested) 并尝试使用以下方法获取该类型的全名:
typeSymbol.ToDisplayString(new SymbolDisplayFormat(
SymbolDisplayGlobalNamespaceStyle.Omitted,
SymbolDisplayTypeQualificationStyle.NameAndContainingTypesAndNamespaces,
SymbolDisplayGenericsOptions.IncludeTypeParameters,
miscellaneousOptions: SymbolDisplayMiscellaneousOptions.ExpandNullable
));
Run Code Online (Sandbox Code Playgroud)
反射返回全名MyNamespace.MyOuter+Nested- 如何从 Roslyn 获取完全相同的字符串?上面的显示格式返回MyNamespace.MyOuter.Nested:-(
我们可以从Microsoft.CodeAnalysis.CSharp.Syntax.TypeSyntax获取System.Type或基本上完全限定的类型名称吗?问题是,TypeSyntax返回类型的名称,因为它是在代码中编写的,可能不是完全合格的类名,我们无法从中找到Type.
当您将鼠标悬停using在 VS2015 中的“简化”指令上时,它会显示完全限定名称。我如何通过 Roslyn 插件获取这些信息?它会使用DiagnosticAnalyzer? 一个CodeFixProvider?
阅读 source.roslyn.codeplex.com,那里有大量信息,包括如何添加using语句,以及如何简化类型名称(包括using语句),但我无法弄清楚如何反向获取完全限定的名称。