2017-08-16 1047 views
-3

我嘗試將元素添加到double[,]數組。但是它出現了一些問題。我必須在JSON中保存座標。它看起來像這樣:在double [,]數組中添加元素

{ 
    "Polyline": [ 
    { 
    "name": "Line1", 
    "towers": [ 
     [13.32, 33.12], 
     [3.7, 565.5432], 
     [867.762, 653.1676], 
      ... 
    ] 
    ] 
    } 
} 

這裏是代碼:

public double[,] GetTowersById(List<Towers> towers) 
    { 
     double[,] towersCoords = new double[towers.Count-1, towers.Count-1]; 

     using (ZadiagDBEntities context = new ZadiagDBEntities()) 
     { 
      //List<Towers> tower = new List<Towers>(); 
      foreach (var item in towers) 
      { 
       int counter = 0; 
       var tower = context.Towers.First(t => t.ID == item.ID);  // it is an object like Tower tower = new Tower(); with properties tower.Lat and tower.Long (their type is double) 
       object currentElem = new double[]{ Convert.ToDouble(tower.Lat), Convert.ToDouble(tower.Long) }; 
       towersCoords.SetValue(currentElem, counter, counter); 
       counter++; 
      } 
      //tower = context.Towers.Where(t => t.ID == towers[i].ID).ToList(); 


      } 

錯誤消息:

Array is not single dimensional

+0

「有些問題」? –

+0

towerCoords是什麼類型的對象? – jdweng

+0

信息太少... –

回答

0

問題:

你的代碼有問題。 towersCoords是類型double

double[,] towersCoords = new double[towers.Count-1, towers.Count-1]; 

而且要添加的循環內的2D陣列/分配此對象(array類型的currentEle)到towersCoords

object currentElem = new double[]{ Convert.ToDouble(tower.Lat), Convert.ToDouble(tower.Long) }; 

towersCoords.SetValue(currentElem, counter, counter); 

哪個是錯誤的。既然是double類型的數組,它不能接受類型的對象array

它可以接受相似的項目:如果你需要把這個array二維數組裏面

towersCoords.SetValue(5, counter, counter); 

否則,你有改變它的類型。

建議解決方案:

這裏是你如何能做到這另一種方式。由於currentElem只包含Lat和Long,所以對我來說它似乎更適合作爲自定義Struct對象。 創建一個temp結構。

struct TowerCoordiantes 
{ 
    public double Lat; 
    public double Long; 

    public TowerCoordiantes(double pLat, double pLong) 
    { 
     this.Lat = pLat; 
     this.Long = pLong; 
    } 
} 

的類型towersCoords而將成爲這樣的:

TowerCoordiantes[,] towersCoords = new TowerCoordiantes[towers.Count-1, towers.Count-1]; 

而且currentElem的定義也有改變:

TowerCoordiantes currentElem = new TowerCoordiantes(Convert.ToDouble(tower.Lat), Convert.ToDouble(tower.Long)); 

然後如預期該行會工作。

towersCoords.SetValue(currentElem, counter, counter);