Объявление переменной не разрешается должным образом - PullRequest
2 голосов
/ 02 февраля 2009

Используя CodeDom в C #, я пытаюсь сгенерировать следующее для цикла:

for (int i = 0; i < ds.Tables[0].Rows.Count; i = (i + 1))

За исключением того, что мой код генерирует это:

for (int i; (i < ds.Tables[0].Rows.Count); i = (i + 1))

Обратите внимание, что это не инициализирует i в ноль, который не компилируется в C #. (В.Б. принимает это).
Поэтому мне нужно войти позже после того, как код сгенерирован, и исправить это вручную, что в основном раздражает, но я бы хотел это исправить. Код для генерации всего оператора выглядит следующим образом:

CodeVariableDeclarationStatement idx = new CodeVariableDeclarationStatement(new CodeTypeReference("System.Int32"), "i", new CodePrimitiveExpression(0));
        CodeIndexerExpression dsIndex = new CodeIndexerExpression(new CodeVariableReferenceExpression("ds.Tables"), new CodeExpression[] { new CodePrimitiveExpression(0) });
        CodeBinaryOperatorExpression comp = new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("i"), CodeBinaryOperatorType.LessThan, new CodePropertyReferenceExpression(dsIndex, "Rows.Count"));
        CodeAssignStatement incr = new CodeAssignStatement(new CodeVariableReferenceExpression("i"), new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("i"), CodeBinaryOperatorType.Add, new CodePrimitiveExpression(1)));
        CodeIterationStatement iterator = new CodeIterationStatement(idx, comp, incr);

Согласно MSDN это способ инициализации значения, если я не пропущу что-то тонкое. Кто-нибудь может помочь?

Редактировать: Код правильный. Оказывается, другой проект в решении ссылался на библиотеку Redgate-SQL, у которой истек срок действия лицензии, и каким-то образом мешал корректно развертывать мои обновления. Спасибо за вашу помощь и время.

1 Ответ

1 голос
/ 02 февраля 2009

Кажется, он хорошо работает на моей машине.

Возвращает:

for (int i = 0; (i < ds.Tables[0].Rows.Count); i = (i + 1)) {
}

Какую версию фреймворка вы используете?

...