我正在使用罗斯林的2012年9月CTP。
在C#代码文档中获取未解析类型的最优雅方法是什么?例如。类型Guid需要系统 namespace 。目前我有这样的事情:
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是否正确?
GetSymbolInfo 和 GetTypeInfo 之间也有什么区别,它们看起来都与我非常相似。
最佳答案
这里有几个问题。
问:使用IdentifierNameSyntax
是否正确?
答:您可能想使用SimpleNameSyntax
来处理通用类型。另外,您可能不想查看所有SimpleNameSyntax
元素。对于实际上不在类型上下文中的事物,您将得到误报(例如,想象像var x = Console();
这样的代码
问:使用GetSymbolInfo
并检查是否为null是否正确?
答:是的,这是在此处检查的正确选择。
问:GetSymbolInfo
和GetTypeInfo
有什么区别?
答:对于表示类型名称的语法,没有区别。但是,对于任意表达式,GetSymbolInfo
表示表达式的特定符号(例如,方法调用,索引器访问,数组访问,重载运算符等),而GetTypeInfo
表示结果类型(以便您知道要生成的类型)正在为表达式添加声明)。以“InvocationExpressionSyntax
”的myString.GetHashCode()
为例。 GetSymbolInfo
将返回GetHashCode()
的方法符号,而GetTypeInfo
将返回System.Int32
。
关于Roslyn : How to get unresolved types,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13833928/