c# - 变量声明未按预期解析

标签 c# codedom

在 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 库,它以某种方式阻止了我的更新正确部署。感谢您的帮助和时间。

最佳答案

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

返回:

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

您使用的是什么版本的框架?

关于c# - 变量声明未按预期解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/504027/

相关文章:

c# - 如何将列表与硬编码根一起返回到 JSON

c# - 套接字 - Java 客户端,C# 服务器

c# - 如何将输出值放入输出参数中?

c# - 解析 C# 代码(作为字符串)并插入其他方法

c# - 序列化在运行时创建的类

c# - CodeDom 编译类型或命名空间错误

c# - 高性能的属性访问和可能的动态编译

c# - 使用 SmtpClient,得到 "the target machine actively refused it"

c# - 使用 Windows.Security.Cryptography.RSACryptoServiceProvider;在 Windows Phone 8.1 或通用应用程序中

.net - 微软 Roslyn 与 CodeDom