2

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

4

1 に答える 1

1

私のマシンではうまくいくようです。

戻り値:

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

どのバージョンのフレームワークを使用していますか?

于 2009-02-02T17:38:08.010 に答える