16

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

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

这会失败,并出现一个参数异常,上面写着:“关键字”

4

4 回答 4

28

我会使用:

Syntax.LocalDeclarationStatement(
    declaration: Syntax.VariableDeclaration(
        type: Syntax.IdentifierName(Syntax.Token(SyntaxKind.VarKeyword)),
        variables: Syntax.SeparatedList(
            Syntax.VariableDeclarator(
                identifier: Syntax.Identifier(name)))));
于 2011-12-06T13:16:55.250 回答
19

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

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

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

于 2011-12-06T14:53:18.787 回答
7

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

Syntax.ParseStatement("var " + name);
于 2011-12-10T15:23:07.823 回答
4

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

https://roslynquoter.azurewebsites.net

于 2012-07-23T05:40:46.327 回答