如何用Roslyn声明var变量?

Seb*_*Piu 16 c# roslyn

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

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

这失败了一个Argument异常,上面写着:"keyword"

Jb *_*ain 26

我用的是:

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

  • 是的,问题是at实际上不是关键字,它就是我们所说的上下文关键字. (2认同)

Eri*_*ert 19

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

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

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


Dus*_*ell 7

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

Syntax.ParseStatement("var " + name);
Run Code Online (Sandbox Code Playgroud)