在C#中我的for循环的正确语法是什么?

时间:2015-12-14 05:34:33

标签: c# loops for-loop

我已经创建了一个wpf程序,并使用for循环来获取项目的名称,qty和prc的值,并将它们转换为字符串,以便在我在应用程序中加载的电子表格中显示它们。

到目前为止,我的工作代码是:

worksheet1.Range["C14:D14:E14"].Value = got_item;
worksheet1.Cells["A14"].Value = qty.Value.ToString();
worksheet1.Cells["G14"].Value = prc.Value.ToString();
v1 = got_value;
i1q = Int32.Parse(qty.Value.ToString());
i1p = prc.Value;

但是,我将不得不再重复12次,直到:

worksheet1.Range["C26:D26:E26"].Value = got_item;
worksheet1.Cells["A26"].Value = qty.Value.ToString();
worksheet1.Cells["G26"].Value = prc.Value.ToString();
v13 = got_value;
i13q = Int32.Parse(qty.Value.ToString());
i13p = prc.Value;

它运行良好,但看起来不太吸引人,所以我尝试为它创建一个for循环,但我对for循环几乎没有经验。

我尽我所能,到目前为止,这是我的进步:

for(x=0;x<13;x++)
{
    y += x + 13;
    worksheet1.Range["C"+y+":D"+y+":E"+y].Value = "";
    worksheet1.Cells["A"+y].Value = qty.Value.ToString();
    worksheet1.Cells["G"+y].Value = prc.Value.ToString();
    v + x = got_value;
    i + x + q = Int32.Parse(qty.Value.ToString());
    i + x + p = prc.Value;
}

我在连接x和y的for循环值时遇到麻烦:

  1. y到工作表范围和单元格
  2. x调用v(x),i(x)q和i(x)p
  3. 更新:感谢Jcl,这是我的最终结果:

    for (x = 0; x < 13; x++)
    {
        y = x + 14;
        y.ToString();
        b[x] = worksheet1.Range["C" + y + ":D" + y + ":E" + y].Value.ToString();
    
        if (b[x] == "")
            {
                worksheet1.Range["C" + y + ":D" + y + ":E" + y].Value = got_item;
                worksheet1.Cells["A" + y].Value = qty.Value.ToString();
                worksheet1.Cells["G" + y].Value = prc.Value.ToString();
                v[x] = got_value;
                iq[x] = Int32.Parse(qty.Value.ToString());
                ip[x] = prc.Value;
            }
    }
    

    虽然这不起作用,因为if语句在没有else if的情况下循环,一个简单的解决方案就是创建一个单独的if语句并循环else if if 12次。

    如果可以应用,我会尝试研究案例,但是,再次感谢Jcl。刚刚敲掉多行代码并同时学习循环。

1 个答案:

答案 0 :(得分:3)

问题的第一部分是:

y += x + 13;

您正在将y的值增加x+13

因此,在第一次迭代中,y0x0,您获得y=13。 但在第二次迭代中,y13x1。因此,您y之后递增 1+13,最终得到y=27。 在第三次迭代中,y27x2,因此您递增27+(13+2),因此y=42。 (等)

如果在第一次迭代中,y必须为13,则在第二次迭代中,必须为14等,那么您需要将其设置为:

y = x + 13;

没有+=

问题的第二部分是你不能只是将表达式的结果评估为变量的名称(可以通过反射来完成,但让我们忘掉它)。

因此,不是让变量v1v2v3等,以及i1qi2q等,而是有意义的是某种数组或列表。

所以,无论你在哪里定义这些变量,都应该有类似的东西(我无法弄清楚类型,因为你给出的名称不是很具描述性,所以我认为它们是整数,将类型改为合适的) :

int[] v = new int[14];
int[] iq = new int[14];
int[] ip = new int[14];

所以当在循环中访问这些变量时:

v[x] = got_value;
iq[x] = Int32.Parse(qty.Value.ToString());
ip[x] = prc.Value;

请注意,c#中的数组基于索引0,但这是正确的,因为您的for循环(如当前所述)从0迭代到12(而不是从1到13)。