【问题标题】:CLR is optimising my forloop variables awayCLR 正在优化我的 forloop 变量
【发布时间】:2011-10-26 04:05:56
【问题描述】:

我正在尝试运行一个基本循环,该循环将在数据视图网格中找到特定值。我无法弄清楚代码发生了什么,因为 for 循环在评估其基本条件之前就退出了。

private void SearchDataViewGrid(string FileName)
    {
        //finds the selected entry in the DVG based on the image
            for (int i = 0; i == dataPartsList.Rows.Count ; i++)
            {
                if(FileName == dataPartsList.Rows[i].Cells[3].Value.ToString())
                {
                dataPartsList.Rows[i].Selected = true;
                }
            }
        }

程序没有崩溃,但我的“i”变量出现错误,声明它已被优化掉。尝试了一些我在网上找到的简单修复方法,但似乎没有任何效果。

我已验证我传递的字符串是正确的,并且我的“虚拟”DVG 为包含的行数返回值 14。即使我删除了 for 循环中的“if”语句,我仍然会得到同样的错误。

【问题讨论】:

  • 改成for (int i = 0; i < dataPartsList.Rows.Count ; i++)
  • @Henk:你应该把它变成一个答案!

标签: c# variables loops for-loop clr


【解决方案1】:

问题是你的条件是i == dataPartsList.Rows.Count,所以只有当这两个值相等时,主体才会执行。这保证你的循环永远不会执行。您需要将条件更改为 < 而不是 ==

for (int i = 0; i < dataPartsList.Rows.Count ; i++) {
  ...
}

【讨论】:

  • @Ed,Davide,每天睡 4 个小时。谢谢你的收获!
【解决方案2】:

for(init; cond; update) 中间的条件cond 不是 until 条件,而是 while 条件。

所以你需要把它改成

 for (int i = 0; i < dataPartsList.Rows.Count ; i++)

【讨论】:

  • 呸……在这里太久了……我正在评估一个非常真实的说法,难怪它没有触发……谢谢各位的帮助,我实际上只是改变了== 到 != 并且它现在可以正常工作了。
  • 有什么理由不遵循惯例并使用信息量更大的&lt;?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 2016-09-22
  • 1970-01-01
  • 2011-04-12
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多