How do I declare a var variable with Roslyn?

I've got the following piece of code, but I can't find how to get the var TypeSyntax. Any ideas?

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

this fails with an Argument exception that says: "keyword"

Answers


I'd use:

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

Jb Evain's answer is correct; I just thought that I would add that the reason for the error is because "var" is not a predefined type. A predefined type is something like "int" or "string".

The syntactic analyzer does not know whether or not you have a class named "var" in scope; "var" is treated not as a predefined type, but rather as just another name for just another type. Only if we cannot find a type in scope named "var" does the semantic analyzer then decide, oh, this must be an implicitly typed local.

The reason for this is because "var" was added in C# 3, and there might be C# 1 or 2 programs that use "var" as the name of a type. We did not want to break those programs.


Not a precise answer to your question, but another (and simpler) way to achieve the same affect would be to use Syntax.ParseStatement:

Syntax.ParseStatement("var " + name);

To simplify answering questions like these, I've written a tool called Quoter that can generate syntax tree API calls for any given C# program:

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


Need Your Help

Split resize algorithm into two passes

c# algorithm image-processing imageprocessor

I have written the following resizing algorithm which can correctly scale an image up or down. It's far too slow though due to the inner iteration through the array of weights on each loop.

Prototype - click event by element class name

javascript prototypejs dom-events

I am new to the prototype framework and am trying something really simple and failing. I am trying to respond to a click event on a button like so: