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

本文关键字:初学者 覆盖 数组 foreach | 更新日期: 2023-09-27 17:58:03

下一个代码的和平,

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填充数组。提前谢谢。

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

只需将数组声明放在循环之外

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是通过索引

添加的

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

因此:

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

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

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

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