4

Roslyn CTP では、次のメソッドのシグネチャが非常に一般的に使用されます。

LiteralExpressionSyntax LiteralExpression(SyntaxKind kind, SyntaxToken token)

SyntaxKind を渡す理由は何ですか? tokenそれ自体にKindプロパティがありますが、なぜ Roslyn はそれを使用しないのですか?

より正確には、 user-provided を受け取り、それが値のkind狭いセットに限定されていることをアサートし、もこの狭いセットに属していることを確認し、さらに user-provided を渡します。tokenKindkind

Roslyntoken.Kindが明示的な種類を使用せず、ユーザーに渡すようにしないのはなぜですか?

UPD: 実際、主な質問は次のとおりです:kindユーザーによって渡された が の種類と異なる場合はどのような状況tokenですか?

4

1 に答える 1

7

よく見ると、チェックされた種類が実際にはそれぞれの場合で同じではないことがわかります。SyntaxKindsfor と式は別々にあるSyntaxKind.TrueKeywordため、 for トークンとSyntaxKind.TrueLiteralExpression結果のLiteralExpressionSyntax. 更新された質問に答えるために、結果expression.Kind決して一致しませんtoken.Kind

ただし、この場合、トークンの種類と式の種類が 1 対 1 で対応しているように見えます。これは、トークンの種類から式の種類を導出できることを意味します。私はこれを内部的に上げます。

于 2013-06-23T17:04:37.673 に答える