下一个代码的和平,
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填充数组。 提前谢谢。
答案 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();