Как объявить переменную 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);
Ответ 4
Чтобы упростить ответы на такие вопросы, я написал инструмент Quoter, который может генерировать вызовы API синтаксического дерева для любой заданной программы С#:
http://blogs.msdn.com/b/kirillosenkov/archive/2012/07/22/roslyn-code-quoter-tool-generating-syntax-tree-api-calls-for-any-c-program.aspx