将SyntaxKind传递给类Syntax的工厂方法的原因是什么?

时间:2013-06-23 15:59:58

标签: c# roslyn

在Roslyn CTP中,通常使用以下方法签名:

LiteralExpressionSyntax LiteralExpression(SyntaxKind kind, SyntaxToken token)

传递SyntaxKind的原因是什么? token本身有Kind属性,为什么罗斯林不使用它?

更准确地说,它需要用户提供的kind,断言它仅限于一组较窄的值,然后检查token的{​​{1}}是否也属于此窄集,然后进一步传递用户提供的Kind

为什么Roslyn不使用kind并让用户传递明确的类型?

UPD:实际上,主要问题是:用户传递的token.Kindkind类型不同的情况是什么?

1 个答案:

答案 0 :(得分:7)

如果你仔细观察,你会发现在每种情况下检查的种类实际上是相同的。对于和表达式有单独的SyntaxKinds - 因此令牌为SyntaxKind.TrueKeyword,结果为SyntaxKind.TrueLiteralExpressionLiteralExpressionSyntax。要回答您更新的问题,生成的expression.Kind 永远不会token.Kind匹配。

然而,在这种情况下,似乎确实存在令牌种类与表达种类一一对应的情况,这意味着我们可以从令牌种类中导出表达种类。我会在内部提出这个问题。