2017-08-16 56 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);