我有以下代码,但我找不到如何获取var TypeSyntax
。
有什么想法吗?
Syntax.LocalDeclarationStatement(
declaration: Syntax.VariableDeclaration(
type: Syntax.PredefinedType(Syntax.Token(SyntaxKind.VarKeyword)),
variables: Syntax.SeparatedList(
Syntax.VariableDeclarator(
identifier: Syntax.Identifier(name)))
)
)
);
这会失败并出现一个Argument异常,上面写着:“keyword”
答案 0 :(得分:26)
我会用:
Syntax.LocalDeclarationStatement(
declaration: Syntax.VariableDeclaration(
type: Syntax.IdentifierName(Syntax.Token(SyntaxKind.VarKeyword)),
variables: Syntax.SeparatedList(
Syntax.VariableDeclarator(
identifier: Syntax.Identifier(name)))));
答案 1 :(得分:19)
Jb Evain的回答是正确的;我只是认为我会补充说错误的原因是因为“var”不是预定义类型。预定义类型类似于“int”或“string”。
语法分析器不知道你是否在范围内有一个名为“var”的类; “var”不是作为预定义类型处理,而是仅作为另一种类型的另一个名称。只有当我们找不到名为“var”的作用域中的类型时,语义分析器才会决定,哦,这必须是一个隐式类型的本地。
原因是因为在C#3中添加了“var”,并且可能存在使用“var”作为类型名称的C#1或2程序。我们不想打破这些计划。
答案 2 :(得分:7)
对你的问题不是一个精确的答案,但是另一种(和更简单的)方法来实现相同的效果将是使用Syntax.ParseStatement:
Syntax.ParseStatement("var " + name);
答案 3 :(得分:3)
为了简化回答这些问题,我编写了一个名为Quoter的工具,它可以为任何给定的C#程序生成语法树API调用: