[英]C# Roslyn Compiler Syntaxkind Value Keyword
我目前正在使用來自 Roslyn 的語法 API 來生成一些 C# 代碼,並且在定義這樣的集合訪問器時我想知道一件小事:
var setAccessor = AccessorDeclaration(SyntaxKind.SetAccessorDeclaration)
.AddBodyStatements(ExpressionStatement(InvocationExpression(IdentifierName("SetField"))
.AddArgumentListArguments(Argument(IdentifierName("value")))));
var propertyDeclaration = PropertyDeclaration(ParseTypeName("FieldType"), "Field")
.AddModifiers(Token(SyntaxKind.PublicKeyword))
.AddAccessorListAccessors(setAccessor);
效果很好。 我對 setAccessor 中的value
關鍵字有點困惑,因為通常我希望能夠像這樣聲明它:
IdentifierName(Token(SyntaxKind.ValueKeyWord))
但據我所見,沒有SyntaxKind.ValueKeyword
,我是遺漏了什么還是這里有什么問題?
在屬性和索引器聲明中的
set
訪問器中使用上下文關鍵字value
。 它類似於方法的輸入參數。
C# 標准規范說:
以下標識符在句法語法中具有特殊含義,但它們不是關鍵字:add(§17.7)、alias(§16.3)、get(§17.6.2)、global(§16.7)、partial(§17.1.4) ,刪除(§17.7),設置(§17.6.2),值(§17.6.2,§17.7.2),其中(§25.7)和產量(§15.14)。 為了方便和清楚起見,這些標識符在句法語法中顯示為終結符; 但是,它們是標識符。 [注意:因此,與關鍵字不同,這些標識符可以使用@前綴編寫,並且可以包含 unicode-escape-sequences。 尾注]
換句話說,語法 model 將所有上下文關鍵字視為標識符,而不是常規關鍵字。 一些上下文關鍵字(如yield
)確實出現在SyntaxKind中,但其他關鍵字(如var
和value
沒有)。
此 github 問題包括一些相關討論,包括:
它是上下文關鍵字,但不是關鍵字。 Roslyn 的語法 model 僅包含對上下文是語法的上下文關鍵字的顯式支持。 這就是為什么語法 model 沒有告訴你上下文關鍵字
var
和value
的原因。 在任何情況下,所有上下文關鍵字都是標識符。
這個 SO question是相關的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.