zyf1097727546 2017-08-11 04:53 采纳率: 50%
浏览 2458
已采纳

索引超出范围。必须为非负值并小于集合大小。这是怎么回事啊

public static ISpatialReference GetSpatialReference(IFeatureDataset pFeatureDataset)
{
IGeoDataset pGeoDataset = pFeatureDataset as IGeoDataset;
ISpatialReference pSpatialReference = pGeoDataset.SpatialReference;
return pSpatialReference;
}
public static List GetAllFeatureClass(IWorkspace workspace)
{
IEnumDataset dataset = workspace.get_Datasets(esriDatasetType.esriDTFeatureDataset);
IFeatureDataset featureDataset = dataset as IFeatureDataset;

             List<IFeatureDataset> featureDatasetList = new List<IFeatureDataset>();
             while (featureDataset != null)
             {
                 featureDatasetList.Add(featureDataset);
                 featureDataset = dataset.Next() as IFeatureDataset;
             }
             return featureDatasetList;
         }
         public static IWorkspace GetShapefileWorkspace(string sFilePath)
         {
             try
             {
                 IWorkspaceFactory factory = new ShapefileWorkspaceFactoryClass();
                 sFilePath = System.IO.Path.GetDirectoryName(sFilePath);
                 return factory.OpenFromFile(sFilePath, 0);
             }
             catch
             {
                 return null;
             }
         }
    private void 属性ToolStripMenuItem_Click(object sender, EventArgs e)
    {

        IWorkspace workspace = GetShapefileWorkspace(@"C:\Users\10977\Desktop\AE\培训数据\空间分析\1为新学校选址\新学校选址.mxd");
        List<IFeatureDataset> lfd = GetAllFeatureClass(workspace);

        ISpatialReference isr = GetSpatialReference(lfd[0]);
        string st=isr.Name.ToString();
        Form2 fr =new Form2();
        fr.Show();
    }
            ISpatialReference isr = GetSpatialReference(lfd[0]);这句话提示索引超出范围。必须为非负值并小于集合大小。求解啊
  • 写回答

4条回答

  • 乱臣贼子 2017-08-11 05:26
    关注

    List lfd = GetAllFeatureClass(workspace);
    ISpatialReference isr = GetSpatialReference(lfd[0]);

    你看你写的代码,你要知道lfd是个引用类型,引用类型就可能会为null,那么你是不是需要判断lfd是否为null呢,再者,lfd即使不为null,但是可能这个集合里面没有元素呢,也就是长度为0 呢? 你说的这个错误就是长度为0 的时候,你去取下标为0的元素就会报错的。

    正确写法:
    using System.Linq;

    List lfd = GetAllFeatureClass(workspace);
    if(null != lfd && lfd.Any())
    {
    ISpatialReference isr = GetSpatialReference(lfd[0]);
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站