2009-02-02 5 views
2

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

ответ

1

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

Возвращает:

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

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

+0

Это работает и для меня, используя .NET 3.5SP1. – Andy