我正在使用 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(使用前将#替换为@)