运行的时候提示提示数据索引超出组界,一直都没解决问题,请求帮忙!
namespace GPSAnalyst.SE
{
    public class SectionsCombine
    {
        readonly int _interval;
        readonly int _nDelay;
        public static MEG_RI_ROAD_Ety[] _roadcombine = null;
        static Dictionary<int, LinkGroup> _dicLinkGroup = null;
        static public DateTime? Begintime = null;        public SectionsCombine(int intvl, int delay)
        {
            _interval = intvl;
            _nDelay = delay;
        }        public void LinkCombine()
        {
            //装载路段信息
            if (_roadcombine == null || _dicLinkGroup == null)
            {
                //组合道路由外部赋值
                //SpeedEstimateDaoImpl.GetOriginalRoadData<MEG_RI_ROAD_Ety>(out _roadcombine);//从数据库获取需要组合的路段
               
                #region 需要重新组合的路段存放在dicLinkGroup的数据结构中
                _dicLinkGroup = new Dictionary<int, LinkGroup>();//<组合路id 组合路的属性>
                for (int i = 0; i < _roadcombine.Length; i++)//共有多少主干路
                {
                    Console.WriteLine("LinkGroup[{0}]",i);
                    LinkGroup linkgroup = new LinkGroup();//一条主干道
                    List<CarLinkInfo_Ety> roadinfo = new List<CarLinkInfo_Ety>();//一条主干道下的小路径                    if (_roadcombine[i].SUBSECTIONS == null)
                        continue;                    string[] links = _roadcombine[i].SUBSECTIONS.Split('/');//一条主干路下的小路径集合
                    for (int j = 0; j < links.Length; j++)//一条主干路由多少小路径组成
                    {
                        string[] link = links[j].Split('-');//一条小路径的fnode tnode maplength
                        var smallroad = new CarLinkInfo_Ety();//出租车在link上定位点信息,包括fnode tnode maplength
                        smallroad.FNODE = Convert.ToInt16(link[0]);
                        smallroad.TNODE = Convert.ToInt16(link[1]);
                        smallroad.MAPLENGTH = Convert.ToInt16(link[2]);
                        roadinfo.Add(smallroad);
                    }
                    linkgroup.id = _roadcombine[i].ID;
                    linkgroup.roadid = _roadcombine[i].ARCID;
                    linkgroup.LinkGroupName = _roadcombine[i].NAME;//组合后路段的名称
                    linkgroup.FromNode = _roadcombine[i].FNODE;//组合后路段的fnode
                    linkgroup.ToNode = _roadcombine[i].TNODE;//组合后路段的tnode
                    linkgroup.roadtype = _roadcombine[i].TYPE;
                    linkgroup.links = roadinfo;//组合后路段的小路段link的信息
                    _dicLinkGroup.Add(linkgroup.id, linkgroup);
                }
我找到的问题是标了颜色的,
最开始是在(按钮事件代码)
rivate void BtnStartBySEClick(object sender, EventArgs e)
        {var sheetName = Path.GetFileNameWithoutExtension(tbxFileSrcPath.Text);
                var att = Path.GetExtension(tbxFileSrcPath.Text);
                if (att != ".csv")
                {
                    sheetName = "Sheet1";
                }
                //tbxSheetName.Text = sheetName;
                var filehelper1 = new FileHelper(tbxFileSrcPath.Text);
                var objs1 = filehelper1.GetDataSet(sheetName, (att ==
                                                               ".csv")).Tables[0];//try
        //    {
            
                
                var dataSources = RDBC.Base.ChangTypeHelper.Convert.ToList<SE.Entity.FCD_MM_GPS_Ety>(objs1);
                var ramdon = new Random();
                foreach (var fcdMmGpsEty in dataSources)
                {
                    fcdMmGpsEty.SPEED = ramdon.Next(15,35);
                    //fcdMmGpsEty.SPEED = 0;
                }
                sheetName = Path.GetFileNameWithoutExtension(tbxRoadFilePath.Text);
                att = Path.GetExtension(tbxRoadFilePath.Text);
                if (att != ".csv")
                {
                    sheetName = "Sheet1";
                }
                //tbxSheetName.Text = sheetName;                var filehelper2 = new FileHelper(tbxRoadFilePath.Text);
                var objs2 = filehelper2.GetDataSet(sheetName, (att ==
                                                               ".csv")).Tables[0];
                List<MEG_RI_ROAD_Ety> roadcombine = FileHelper.GetEntities<MEG_RI_ROAD_Ety>(objs2).ToList();
                    //RDBC.Base.ChangTypeHelper.Convert.ToList<MEG_RI_ROAD_Ety>(objs2);                //下面是新的计算赋值逻辑
                SE.PlData.ReSet();
                SE.PlData.FcdMmGpsEties.AddRange(dataSources.ToArray());
                SE.PlData.MegRiRoadEties.AddRange(roadcombine);
                SE.Service.CaculateSevice.Default.BizLoop(roadcombine,dataSources);
                dgvDemo.DataSource = SE.PlData.FcdSEResultEties;
        //    }
          /*  catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }*/
            
        }        private void btnOutTable_Click(object sender, EventArgs e)
        {
            //var table = (DataTable)dgvDemo.DataSource;
            var filesaveName = Tools.DialogHelper.SaveDialog("Savr To Csv", "csv", new[]{"csv"});
            if (dgvDemo.DataSource is DataTable)
            {
                var table = (DataTable)dgvDemo.DataSource;
                FileHelper.ExportToSvc(table, filesaveName);
            }
            else
            {
                FileHelper.ExportToSvc(dgvDemo,filesaveName);
            }        }        private void btnOutCombine_Click(object sender, EventArgs e)
        {
            var filesaveName = Tools.DialogHelper.SaveDialog("Savr To Csv", "csv", new[] { "csv" });
            FileHelper.Save2Csv(SE.PlData.FcdCombineGpsEties.ToArray(), filesaveName);        }        
    }
}
请教众人讨论未果,请帮帮忙

解决方案 »

  1.   

     smallroad.FNODE = Convert.ToInt16(link[0]);
                            smallroad.TNODE = Convert.ToInt16(link[1]);
                            smallroad.MAPLENGTH = Convert.ToInt16(link[2]);
                            roadinfo.Add(smallroad);
    ==>
    link有三个元素吗
    你把 link的长度输出看看, 这个数组是不是有三个元素
      

  2.   

     for (int i = 0; i < _roadcombine.Length; i++)//共有多少主干路
                    {
                        Console.WriteLine("LinkGroup[{0}]",i);
                        LinkGroup linkgroup = new LinkGroup();//一条主干道
                        List<CarLinkInfo_Ety> roadinfo = new List<CarLinkInfo_Ety>();//一条主干道下的小路径
     猜测 是不是这里要.length -1 还有下边的j循环的时候