我有一个包含以下代码的类:
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;
}
答案 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];