目标数组不够长。检查destindex和length以及数组的下限

时间:2016-01-05 06:33:01

标签: c# arrays exception

我有一个包含以下代码的类:

  Array tags;
  if (lines.Length > 0)
  {
      configText = lines[0];
      tags = new Array[lines.Length];
      lines.CopyTo(tags,1);
  }

这里我收到以下错误:

  

目标数组不够长。检查destindex和长度   数组的下界。

方法:

     private bool ReadPointListFile(string fileName) {

        // Read each line of the file into a string array. Each element
        // of the array is one line of the file.
        string[] lines = System.IO.File.ReadAllLines(fileName);
        string configText = string.Empty;

        if (lines.Length > 0)
        {
            configText = lines[0];
            tags = new Array[lines.Length];
            lines.CopyTo(tags,1);
        }
        else
            lines.CopyTo(tags,0);

        GetConfigurationInfo(lines[0], out this.sInterval, out this.dataAggregate);

        return true;
    }

2 个答案:

答案 0 :(得分:5)

它将从1个索引开始复制,而不是从零索引,它正在创建问题。 尝试

lines.CopyTo(tags,0);

答案 1 :(得分:1)

标签是Array对象的数组,可能不是您想要的。 如果要从字符串数组(行)复制,目标数组也应该是字符串数组。 那么,无论你在哪里声明标签,它应该是string[] tags; 在你的if块中它应该是tags = new string[lines.Length];

这是关于类型和ArrayTypeMismatch异常的部分。

现在,如果您打算复制除第一个元素之外的所有元素,则无法使用CopyTo(tags, 1),因为1表示目标数组。它表示从哪里开始写入值。这就是你得到例外的原因。 相反,只需循环:     for(int i = 1; i< lines.Length; i ++)     {         tags [i-1] = lines [i];     } 此外,在这种情况下,标签数组只有一个元素,因此您可以将其设为:tags = new string[lines.Length-1];

如果要跳过行和标记数组中的第一个索引,那么它是tags = new string[lines.Length];tags[i-1] = lines[i];