Использование 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#. (VB действительно принимает это).
Итак, я должен зайти позже после создания кода и исправить его вручную, что в основном просто раздражает, но я бы хотел его исправить. Код для создания всего заявление выглядит следующим образом:
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, у которой была истекшая лицензия, и это как-то мешало моим обновлениям развертываться правильно. Спасибо за вашу помощь и время.
Это работает и для меня, используя .NET 3.5SP1. – Andy