2011-05-28 47 views
2

接下來的代碼和平,的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值。

這可能是一個初學者的問題(我是初學者,無法弄清楚),但我怎樣才能用多個值來填充數組。 預先感謝您。

回答

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是通過索引添加的

+0

+1的解決方案。打我的代碼! ;) – 2011-05-28 10:42:30

+0

非常感謝你的解釋。 – Plumbum7 2011-05-29 07:54:51

0

你已經在foreach循環中聲明瞭數組,所以它會在循環的每次迭代中創建一個新數組。你應該在循環之外聲明並在裏面使用它,然後你會得到你想要的。

所以:

double[,] lonlat; 

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

我的代碼可能是不完全正確的,只是想給你的想法.. – 2011-05-28 10:42:06

+0

是的,這是我的問題;非常感謝你的解釋,但我去@Mikant – Plumbum7 2011-05-29 07:54:15

0

lonlat變量是你的本地變量foreach loop:它包含的數組在每次迭代中被重新創建。

無法生成C#中的數組。你可以預分配數組,@Mikant做,或者你可以在一個List<T>積累的結果,或者你可以使用LINQ:

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

非常感謝你的解釋,但我去@Mikant的解決方案 – Plumbum7 2011-05-29 07:54:26