Roslyn:如何获取未解析的类型

2024-01-10

我正在使用 Roslyn 的 2012 年 9 月 CTP。

在 C# 代码文档中获取未解析类型的最优雅的方法是什么?例如。类型 Guid 需要系统命名空间。目前我有这样的事情:

            var semanticModel = (SemanticModel)document.GetSemanticModel();
            var tree = (SyntaxTree)document.GetSyntaxTree();

            //get unresolved types
            var unresolvedTypes = tree.GetRoot().DescendantNodes().OfType<IdentifierNameSyntax>()
                .Where(x => semanticModel.GetSymbolInfo(x).Symbol == null);

使用 IdentifierNameSyntax 和 GetSymbolInfo 是否正确?

还有什么区别获取符号信息 and 获取类型信息,他们看起来都和我很相似。


这里有几个问题。

问:使用方法是否正确IdentifierNameSyntax?
答:您可能想使用SimpleNameSyntax处理解析泛型类型。另外,您可能不想查看全部SimpleNameSyntax元素。对于实际上不在类型上下文中的事物,您将会得到误报(例如,想象一些代码,例如var x = Console();

问:使用方法是否正确GetSymbolInfo并检查是否为空?
答:是的,在这里检查是正确的。

问: 有什么区别GetSymbolInfo and GetTypeInfo?
答:对于表示类型名称的语法来说,没有区别。然而,对于任意表达式GetSymbolInfo表示表达式的特定符号(例如,方法调用、索引器访问、数组访问、重载运算符等),以及GetTypeInfo表示结果类型(这样您就知道在为表达式添加声明时要生成什么类型​​)。以InvocationExpressionSyntax for "myString.GetHashCode()". GetSymbolInfo将返回方法符号GetHashCode(), while GetTypeInfo会回来System.Int32.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Roslyn:如何获取未解析的类型 的相关文章

随机推荐