Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Roslyn声明var变量?_C#_Roslyn - Fatal编程技术网

C# 如何使用Roslyn声明var变量?

C# 如何使用Roslyn声明var变量?,c#,roslyn,C#,Roslyn,我有下面的代码,但是我找不到如何获得varTypeSyntax。 有什么想法吗 Syntax.LocalDeclarationStatement( declaration: Syntax.VariableDeclaration( type: Syntax.PredefinedType(Syntax.Token(SyntaxKind.VarKeyword)), variables: Syntax.SeparatedLis

我有下面的代码,但是我找不到如何获得var
TypeSyntax
。 有什么想法吗

Syntax.LocalDeclarationStatement(                   
    declaration: Syntax.VariableDeclaration(
        type: Syntax.PredefinedType(Syntax.Token(SyntaxKind.VarKeyword)),
        variables: Syntax.SeparatedList(
        Syntax.VariableDeclarator(
            identifier: Syntax.Identifier(name)))
        )
    )
);
此操作失败,参数异常为:“关键字”

我将使用:

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”的作用域中找不到类型时,语义分析器才会决定,哦,这必须是隐式类型的局部变量


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

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

Syntax.ParseStatement("var " + name);

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


是的,问题是at实际上不是一个关键词,而是我们所说的上下文关键词。谢谢你的解释,Eric,现在它有意义了。我想我迷路了,因为我没有意识到IdentifierNameSyntax是一种类型语法,而且我缺少了一点上下文+1,更多的是“声明性的”。我赞成在C#中添加代码引用,并使用插值。Nemerle中的类似内容: