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填充数组。提前谢谢。
只需将数组声明放在循环之外
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();