foreach数组保持覆盖(初学者)

时间:2011-05-28 10:37:31

标签: c# arrays foreach

下一个代码的和平,

foreach (var trksegg in trk.Segs)
        { 
        double lon = Convert.ToDouble(trksegg.Longitude);
        double lat = Convert.ToDouble(trksegg.Latitude);
        double[,] lonlat = { { lon, lat } };

看起来要一直覆盖我的lonlat数组,所以数组永远不会变大[0,0] lon值和[0,1] lat值。

这可能是一个初学者的问题(我是初学者,无法弄清楚),但我怎么能用多个valua填充数组。 提前谢谢。

3 个答案:

答案 0 :(得分:6)

将数组声明放在循环之外

double[,] lonlat = new double[trk.Segs.Length, 2];
for (int i=0; i<trk.Segs.Length; i++) {
    lonlat[i,0] = Convert.ToDouble(trk.Segs[i].Longitude);
    lonlat[i,1] = Convert.ToDouble(trk.Segs[i].Latitude);
}

还有一个小错误:数组没有Add方法,它只支持索引访问,所以如果你写

arr = { { lon, lat } }

在一个循环中,它总是会将新数组重新分配给你的var,所以它也毫无意义。在我的例子中,lon和lat通过索引添加

答案 1 :(得分:0)

您已在foreach循环中声明了数组,因此它将在循环的每次迭代中创建一个新数组。你应该在循环之外声明它并在里面使用它,然后你就会得到你想要的东西。

所以:

double[,] lonlat;

foreach(var trsksegg in trk.Segs)
{
    lonlat = { { lon, lat } };
}

答案 2 :(得分:0)

lonlat变量是foreach循环的本地变量:它包含的数组会在每次迭代中重新创建。

C#中的数组无法增长。你可以像@Mikant一样预先分配数组,或者你可以在List<T>中累积结果,或者你可以使用LINQ:

var lonlats = trk.Segs.Select(
    trksegg => new[] {
        Convert.ToDouble(trksegg.Longitude),
        Convert.ToDouble(trksegg.Latitude)
    }).ToArray();