4

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

LiteralExpressionSyntax LiteralExpression(SyntaxKind kind, SyntaxToken token)

通过 SyntaxKind 的原因是什么?token本身就有Kind属性,为什么罗斯林不用呢?

更准确地说,它接受 user-provided kind,断言它仅限于一组窄值,然后检查token'是否Kind也属于这个窄集,然后kind进一步传递 user-provided 。

为什么 Roslyn 不使用token.Kind并让用户通过显式类型?

UPD:实际上,主要问题是:用户传递的 与's kindkind不同的情况是什么?token

4

1 回答 1

7

如果您仔细观察,您会发现在每种情况下检查的种类实际上并不相同有单独SyntaxKinds的 for 和表达式 - 所以你会有一个SyntaxKind.TrueKeywordfor 令牌和SyntaxKind.TrueLiteralExpression结果LiteralExpressionSyntax。要回答您更新的问题,结果expression.Kind永远不会匹配token.Kind.

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

于 2013-06-23T17:04:37.673 回答