在Roslyn CTP中,通常使用以下方法签名:
LiteralExpressionSyntax LiteralExpression(SyntaxKind kind, SyntaxToken token)
传递SyntaxKind的原因是什么? token
本身有Kind
属性,为什么罗斯林不使用它?
更准确地说,它需要用户提供的kind
,断言它仅限于一组较窄的值,然后检查token
的{{1}}是否也属于此窄集,然后进一步传递用户提供的Kind
。
为什么Roslyn不使用kind
并让用户传递明确的类型?
UPD:实际上,主要问题是:用户传递的token.Kind
与kind
类型不同的情况是什么?
答案 0 :(得分:7)
如果你仔细观察,你会发现在每种情况下检查的种类不实际上是相同的。对于和表达式有单独的SyntaxKinds
- 因此令牌为SyntaxKind.TrueKeyword
,结果为SyntaxKind.TrueLiteralExpression
为LiteralExpressionSyntax
。要回答您更新的问题,生成的expression.Kind
永远不会与token.Kind
匹配。
然而,在这种情况下,似乎确实存在令牌种类与表达种类一一对应的情况,这意味着我们可以从令牌种类中导出表达种类。我会在内部提出这个问题。