C# で CodeDom を使用して、次の for ループを生成しようとしています。
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 ライブラリを参照していたことが判明しました。これが何らかの理由で、更新プログラムが正しくデプロイされない原因となっていました。あなたの助けと時間をありがとう。