【问题标题】:Defining variables using foreach使用 foreach 定义变量
【发布时间】:2017-03-06 14:17:23
【问题描述】:
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 项,但我的代码中有更多。)我想在一行中定义变量。 我很惭愧地问这些关于堆栈溢出的简单问题,但我在网络上找不到正确的语法。

【问题讨论】:

  • @rory.ap 真的,在我看来,上面的代码甚至不符合
  • 您需要在 foreach 之前定义 xz 数组,然后在 foreach 中相应地填充它们。
  • 你已经双重声明了 x。一次用于循环变量,再次作为循环内的数组。

标签: c# variables foreach syntax


【解决方案1】:

这实际上可以使用 Linq 轻松完成。 Enumerable.Range 可以为您提供所需的 0-21 值,然后只需使用 Select 在每个 x 值上运行您的公式,然后在 x 上执行另一个 Select 使用第二个公式来获得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

【讨论】:

    【解决方案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;
    }
    

    【讨论】:

    • 你好,MessageBox.Show(x[i].ToString());当我将其写到代码的末尾时,它会按预期显示每个值。但是,如果我想获得像 x[7] 这样的特定值怎么办?
    • 我自己想出了这部分。 MessageBox.Show(x[5].ToString());这个答案正是我想要的。
    【解决方案3】:

    您需要在循环之前声明这两个数组。我建议使用普通的 for 循环。这将为您提供手头的索引变量,您可以使用它来指向数组中的位置。此外,它还允许您设置数组的长度并避免数组xarray,因为如果您从i=0 开始以1 i++ 的步长增加索引变量并停止在i&lt;=20

    int finalNumber = 20;
    double x[] = new double[finalNumber+1]  // +1 because you want to include the value 20
    double z[] = new double[finalNumber+1]
    
    for (int i = 0; i <= finalNumber; i++)
    {
        x[i] = xPT / 20 * i;
        z[i] = Math.Pow(x[i] / Hd , 1.85) / 2 * Hd);
    }
    

    这里是一个small introduction在for循环和索引变量的使用

    【讨论】:

    • 我不知道为什么,但它不起作用。粘贴此代码时遇到一些错误。 " 无法将类型 'double[]' 隐式转换为 'double'" " 无法将 [] 索引应用于类型为 'double' 的表达式"
    • @Meriç 我犯了一个错误。我在计算中更正了它,我只使用了索引而不是x[i]。现在它应该可以按预期工作了
    猜你喜欢
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多