使用Roslyn获取集合类型

时间:2015-12-06 23:07:43

标签: vb.net roslyn

使用Roslyn for VB.Net我可以使用下面的代码获取表达式的类型。

Dim ExpressionType As TypeInfo = SemanticModel.GetTypeInfo(ForEachStatement.Expression)

如果表达式是一个集合(List,Dictionary,Array,Collection ...),我怎样才能找出集合中的内容?对于下面的示例,我想找到DocumentIdAndRoot

Dim docs As List(Of DocumentIdAndRoot) = Await RemoveParameterAsync(document, parameter, root, cancellationToken)

2 个答案:

答案 0 :(得分:2)

如果您的问题特定于foreach,则应使用SemanticModel.GetForEachStatementInfo(),其中会返回ForEachStatementInfo并提供所有必要信息。

答案 1 :(得分:1)

你可以做的是获取你得到的TypeInfo,然后查看ImplementedInterfaces属性。其中一个是IEnumerable或ICollection,从那里你可以看看泛型参数是什么。

如果你确实在某个地方有过ForEach,那么你最好还是使用Tamas'方法,因为那将正确地实现那里的语言规则。