使用foreach

时间:2017-03-06 14:17:23

标签: c# variables foreach syntax

int[] xarray = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
foreach (int x in xarray)
{
    double x[] = xPT / 20 * [];
    double z[] = Math.Pow(x[] / Hd , 1.85) / 2 * Hd);
}

        /* My previous code was;
        x0 = xPT / 20 * 0;
        x1 = xPT / 20 * 1;
        x2 = xPT / 20 * 2;
        x3 = xPT / 20 * 3;
        x4 = xPT / 20 * 4;
        x5 = xPT / 20 * 5;
        x6 = xPT / 20 * 6;
        x7 = xPT / 20 * 7;
        x8 = xPT / 20 * 8;
        x9 = xPT / 20 * 9;
        x10 = xPT / 20 * 10;
        x11 = xPT / 20 * 11;
        x12 = xPT / 20 * 12;
        x13 = xPT / 20 * 13;
        x14 = xPT / 20 * 14;
        x15 = xPT / 20 * 15;
        x16 = xPT / 20 * 16;
        x17 = xPT / 20 * 17;
        x18 = xPT / 20 * 18;
        x19 = xPT / 20 * 19;
        x20 = xPT / 20 * 20;
        z0 = Math.Pow(x0 / Hd, 1.85) / 2 * Hd;
        z1 = Math.Pow(x1 / Hd, 1.85) / 2 * Hd;
        z2 = Math.Pow(x2 / Hd, 1.85) / 2 * Hd;
        z3 = Math.Pow(x3 / Hd, 1.85) / 2 * Hd;
        z4 = Math.Pow(x4 / Hd, 1.85) / 2 * Hd;
        z5 = Math.Pow(x5 / Hd, 1.85) / 2 * Hd;
        z6 = Math.Pow(x6 / Hd, 1.85) / 2 * Hd;
        z7 = Math.Pow(x7 / Hd, 1.85) / 2 * Hd;
        z8 = Math.Pow(x8 / Hd, 1.85) / 2 * Hd;
        z9 = Math.Pow(x9 / Hd, 1.85) / 2 * Hd;
        z10 = Math.Pow(x10 / Hd, 1.85) / 2 * Hd;
        z11 = Math.Pow(x11 / Hd, 1.85) / 2 * Hd;
        z12 = Math.Pow(x12 / Hd, 1.85) / 2 * Hd;
        z13 = Math.Pow(x13 / Hd, 1.85) / 2 * Hd;
        z14 = Math.Pow(x14 / Hd, 1.85) / 2 * Hd;
        z15 = Math.Pow(x15 / Hd, 1.85) / 2 * Hd;
        z16 = Math.Pow(x16 / Hd, 1.85) / 2 * Hd;
        z17 = Math.Pow(x17 / Hd, 1.85) / 2 * Hd;
        z18 = Math.Pow(x18 / Hd, 1.85) / 2 * Hd;
        z19 = Math.Pow(x19 / Hd, 1.85) / 2 * Hd;
        z20 = Math.Pow(x20 / Hd, 1.85) / 2 * Hd;
         */

如上所示,我之前的代码太长了。 (上面只列出了2项,但我的代码中有更多项。)我想在一行中定义变量。 在堆栈溢出时问这些简单的问题我感到很惭愧,但我无法在网上找到正确的语法。

3 个答案:

答案 0 :(得分:3)

使用Linq实际上可以轻松完成。 Enumerable.Range可以为您提供所需的0-21值,然后只需使用Select在每个x值上运行公式,然后在{{Select上执行另一个x 1}}使用第二个公式获取z值。

var x = Enumerable.Range(0,21).Select(i => xPT / 20.0 * i).ToList();
var z = x.Select(xi => Math.Pow(xi / Hd, 1.85) / 2.0 * Hd).ToList();

如果您愿意,也可以使用ToArray

答案 1 :(得分:2)

您还可以使用for循环初始化xarray

var size = 21;

var xarray = new int[size];
var x = new double[size];
var z = new double[size];

for (int i = 0; i < size; i++)
{
    xarray[i] = i;
    x[i] = xPT / 20 * xarray[i];
    z[i] = Math.Pow(x[i] / Hd, 1.85) / 2 * Hd;
}

答案 2 :(得分:1)

您需要在循环之前声明两个数组。我建议使用正常的for循环。这将为您提供一个索引变量,您可以使用它来指向数组中的位置。此外,它还允许您设置数组的长度并避免使用数组xarray,因为如果从i=0开始,索引变量将遍历所有这些值,步长为1 {{ 1}}并停在i++

i<=20

这是for循环中的small introduction和索引变量的使用