C# 列表<&燃气轮机;循环中

C# 列表<&燃气轮机;循环中,c#,list,loops,C#,List,Loops,我在使用循环中的列表时遇到问题,如果你们中有人能帮助我,我将不胜感激。 我想创建一个列表,并用大于-999的值从数组(在我的代码中命名为:sarray)填充它。但问题是,当值小于-999时,代码转储列表中以前的项,并且大小不是40而是27(就像创建了新列表一样) List nums=new List(); 对于(int i=0;i-999) { 增补(sarray[i]); } } 这些是价值观: [31411.0857 31411.0902 31411.0847 31411.0858 314

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

List nums=new List();
对于(int i=0;i<50;i++)
{
如果(sarray[i]>-999)
{
增补(sarray[i]);
}
}
这些是价值观:

[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 31411.0919 31411.0919 31411.0919]


通用列表在其中一个列表中获取一个可枚举项,您可以使用Linq
Where
扩展方法来约束要添加的项:

var nums = new List<double>(sarray.Where(d => d > -999));
我相信这种风格比手工制作自己的循环更能表达你的意图

另一方面,
double.NaN
可能是无效值的更明显表示形式


但问题是当值小于-999时

这是因为您只检查值大于-999:
if(sarray[i]>-999)

但是,您提供的值转储没有任何小于-999的项,因此只要数据集保持不变,此检查就足够了。

使用以下方法:

List<double> nums = new List<double>(sarray.Where(x => x > -999));
List nums=新列表(sarray.Where(x=>x>-999));

类似的方法可以工作,无需自己迭代:

List<double> nums = (from value in sarray 
                     where (value > -999) select value).ToList<double>();
List nums=(来自sarray中的值
其中(value>-999)选择value.ToList();

您所描述的内容与所显示的代码不符。它会将数组中从索引0到索引49的大于-999的所有值添加到列表中

如果数组大于50项,它将不会使用数组中的所有项。应使用循环中数组的长度来获取所有项:

for (int i = 0; i < sarray.Length; i++)
输出:

40

我相信他只想在名单上增加某些项目(尽管不是我的反对票)@EricJ.修正后,直接进入代码,快速浏览了导语lol@EricJ.在这种情况下,下议院的选民应该再次出现,并像你一样具有建设性——现在我完全正确的答案是错误的下议院。希望我们有能力“下议院”lol@KirkWoll我很快就解决了,你仍然可以取消你的否决票是的,我知道它坏了,这就是为什么我把评论放下来-希望路人在认为一个被否决的项目需要更多的否决票之前阅读内容。伙计们感谢你们的帮助。我真的很感谢你们的好意:)请展示一个简短但完整的程序来说明问题。不太了解你们面临的问题,是吗似乎
sarray
中的
27
数字是
>-999
。记住-998大于-9999 sarray中的值是什么?好的,现在剩下的值是什么?你能发布这些值吗?记住你可以编辑你的问题。@Amir,我把它移到了你的问题中,请删除你最后的评论。只是为了rify,这确实会迭代
sarray
,它只是为你做的。@Adamhuldsworth你说得对,用词不当,显然任何解决方案都会迭代
sarray
。这太疯狂了!当我创建新代码时,它会起作用。但是当我在原始代码中使用相同的东西时,它又给了我27个错误!我认为有错误!我很抱歉!
for (int i = 0; i < sarray.Length; i++)
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);
40