变量声明未按预期解析

时间:2009-02-02 17:20:00

标签: c# codedom

在C#中使用CodeDom,我试图为循环生成以下内容:

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 个答案:

答案 0 :(得分:1)

它似乎在我的机器上运行良好。

返回:

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

您使用的是哪种版本的框架?