Используя 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, у которой истек срок действия лицензии, и каким-то образом мешал корректно развертывать мои обновления. Спасибо за вашу помощь и время.