Как объявить переменную var с Roslyn?

У меня есть следующий фрагмент кода, но я не могу найти, как получить var TypeSyntax. Любые идеи?

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

это не удается с аргументом Argument, в котором говорится: "keyword"

Ответы

Ответ 1

Я бы использовал:

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

Ответ 2

Ответ Jb Evain правильный; Я просто подумал, что добавлю, что причиной ошибки является то, что "var" не является предопределенным типом. Предопределенный тип - это нечто вроде "int" или "string".

Синтаксический анализатор не знает, есть ли у вас класс с именем "var" в области; "var" обрабатывается не как предопределенный тип, а скорее как просто другое имя только для другого типа. Только если мы не сможем найти тип в области с именем "var" , тогда семантический анализатор примет решение, о, это должно быть неявно типизированное локальное.

Причиной этого является то, что в С# 3 добавлено "var" , и могут быть С# 1 или 2 программы, которые используют "var" в качестве имени типа. Мы не хотели нарушать эти программы.

Ответ 3

Не точный ответ на ваш вопрос, но другой (и более простой) способ добиться такого же эффекта - использовать Syntax.ParseStatement:

Syntax.ParseStatement("var " + name);