如何用Roslyn声明var变量?

我有以下代码,但我找不到如何获取var TypeSyntax 。 有任何想法吗?

 Syntax.LocalDeclarationStatement( declaration: Syntax.VariableDeclaration( type: Syntax.PredefinedType(Syntax.Token(SyntaxKind.VarKeyword)), variables: Syntax.SeparatedList( Syntax.VariableDeclarator( identifier: Syntax.Identifier(name))) ) ) ); 

这失败了一个Argumentexception,上面写着:“keyword”

我用的是:

 Syntax.LocalDeclarationStatement( declaration: Syntax.VariableDeclaration( type: Syntax.IdentifierName(Syntax.Token(SyntaxKind.VarKeyword)), variables: Syntax.SeparatedList( Syntax.VariableDeclarator( identifier: Syntax.Identifier(name))))); 

Jb Evain的回答是正确的; 我只是想我会补充说错误的原因是因为“var”不是预定义的类型 。 预定义类型类似于“int”或“string”。

句法分析器不知道你是否在范围内有一个名为“var”的类; “var”不是作为预定义类型处理,而是仅作为另一种类型的另一个名称。 只有当我们找不到名为“var”的作用域中的类型时, 语义分析器才会决定,哦,这必须是一个隐式类型的本地。

原因是因为在C#3中添加了“var”,并且可能存在使用“var”作为类型名称的C#1或2程序。 我们不想打破这些计划。

不是你的问题的精确答案,但实现相同的影响的另一种(和更简单的)方法是使用Syntax.ParseStatement:

 Syntax.ParseStatement("var " + name); 

为了简化回答这些问题,我编写了一个名为Quoter的工具,它可以为任何给定的C#程序生成语法树API调用:

http://blogs.msdn.com/b/kirillosenkov/archive/2012/07/22/roslyn-code-quoter-tool-generating-syntax-tree-api-calls-for-any-c-program.aspx