列出循环中的<>

0 c# loops list

我在循环中使用列表时遇到问题,如果你们中的任何人能帮助我,我会很感激.我想创建一个列表并从数组(在我的代码中命名:sarray)填充它,其值大于-999.但问题是当值小于-999时,代码转储列表的前一项而大小而不是40,是27(就好像创建了新列表一样)!

  List<double> nums = new List<double>();
        for (int i = 0; i < 50; i++)
        {
            if (sarray[i] > -999)
            {
                nums.Add(sarray[i]);

            }
        }
Run Code Online (Sandbox Code Playgroud)

这些是价值观:

[31411.0857 31411.0902 31411.0847 31411.0858 31411.0859 31411.0479 31411.0649 31411.0895 31411.0944 31411.0207 31411.0683 31411.0717 31411.075 31411.0825 -999 -999 -999 -999 -999 -999 -999 -999 -999 -999 31411.0156 31411.0718 31411.0719 31411.0884 31411.0885 31411.0936 31411.0896 31411.0897 31411.0537 31411.066 31411.0661 31411.0556 31411.0701 31411.0731 31411.0952 31411.0716 31411.0776 31411.0803 31411.091 31411.0911 31411.0919 31411.0919 31411.0919 31411.0919 31411.0919 31411.0919]

Guf*_*ffa 6

您所描述的代码不会出现在您显示的代码中.它将从索引0到索引49的数组中添加大于-999的所有值到列表中.

如果数组大于50个项目,则不会使用数组中的所有项目.您应该使用循环中数组的长度来获取所有项:

for (int i = 0; i < sarray.Length; i++)
Run Code Online (Sandbox Code Playgroud)

(即使您知道数组总是50个项目,仍然使用该Length属性是一个好主意.这样,即使您将来更改数组的长度,数组也将始终使用整个数组.)

编辑:

我用您的数据测试了您的代码,列表最终有40个项目.

double[] sarray = {
  31411.0857, 31411.0902, 31411.0847, 31411.0858, 31411.0859, 31411.0479,
  31411.0649, 31411.0895, 31411.0944, 31411.0207, 31411.0683, 31411.0717,
  31411.075, 31411.0825, -999, -999, -999, -999, -999, -999, -999, -999,
  -999, -999, 31411.0156, 31411.0718, 31411.0719, 31411.0884, 31411.0885,
  31411.0936, 31411.0896, 31411.0897, 31411.0537, 31411.066, 31411.0661,
  31411.0556, 31411.0701, 31411.0731, 31411.0952, 31411.0716, 31411.0776,
  31411.0803, 31411.091, 31411.0911, 31411.0919, 31411.0919, 31411.0919,
  31411.0919, 31411.0919, 31411.0919
};

List<double> nums = new List<double>();
for (int i = 0; i < 50; i++) {
  if (sarray[i] > -999) {
    nums.Add(sarray[i]);
  }
}

Console.WriteLine(nums.Count);
Run Code Online (Sandbox Code Playgroud)

输出:

40
Run Code Online (Sandbox Code Playgroud)