我有一个代码将数据存储到临时数组中。
string filename = openFileDialog1.FileName;
string[] line = File.ReadAllLines(filename);
using (var reader2 = File.OpenText(@filename))
{
for (int i = 0; i < line.Length; i++)
{
string lines = reader2.ReadLine();
var data = lines.Split(',');
double[,] arrayTemp = new double[line.Length, 2];
arrayTemp[i, 0] = double.Parse(data[0]);
arrayTemp[i, 1] = double.Parse(data[1]);
}
Array.Copy(arrayTemp, GlobalDataClass.dDataArray, line.Length); //error the name "arrayTemp" does not exist in the current context.
}
由于2d数组不可调整大小,并且我希望我的全局数组具有灵活性,因此我使用Array.Copy
方法将temp数组复制到Global类数组。但是我在上面的代码中得到了错误。
我的问题是如何将tempArray
复制到全局类数组。
知道如何解决这个问题吗?
答案 0 :(得分:3)
问题:您已在for循环中声明了数组变量arrayTemp
,但它在其外部不可用。
解决方案:您需要在循环外移动数组变量arrayTemp
声明。
试试这个:
string filename = openFileDialog1.FileName;
string[] line = File.ReadAllLines(filename);
double arrayTemp=new double[line.Length,2];//declare outside forloop so it available after forloop.
GlobalDataClass.dDataArray=new double[line.Length,2]; //add this line
using (var reader2 = File.OpenText(@filename))
{
for (int i = 0; i < line.Length; i++)
{
string lines = reader2.ReadLine();
var data = lines.Split(',');
GlobalDataClass.dDataArray[i, 0] = double.Parse(data[0]);
GlobalDataClass.dDataArray[i, 1] = double.Parse(data[1]);
}
Array.Copy(arrayTemp, GlobalDataClass.dDataArray, line.Length);
}
答案 1 :(得分:2)
您的tempArray
已超出Array.Copy
GlobalDataClass.dDataArray
,因为它位于for循环中,您需要将其移动到方法调用的范围内,以便方法可以访问它。 (类似于在其他地方声明//Array is now declared in an accessible scop
double[,] arrayTemp;
string filename = openFileDialog1.FileName;
string[] line = File.ReadAllLines(filename);
using (var reader2 = File.OpenText(@filename))
{
for (int i = 0; i < line.Length; i++)
{
string lines = reader2.ReadLine();
arrayTemp = new double[line.Length, 2];
var data = lines.Split(',');
GlobalDataClass.dDataArray[i, 0] = double.Parse(data[0]);
GlobalDataClass.dDataArray[i, 1] = double.Parse(data[1]);
}
Array.Copy(arrayTemp, GlobalDataClass.dDataArray, line.Length); //error the name "arrayTemp" does not exist in the current context.
}
的方式)
{{1}}
{}层次结构中“更深入”的语句只能访问其中的语句以及其中的其他子范围。原始括号之外的父范围无法访问变量。
答案 2 :(得分:2)
您似乎正在尝试将arrayTemp
的内容复制到GlobalDataClass.dDataArray
,但是您要将值分配给GlobalDataClass.dDataArray
,并尝试将空arrayTemp
复制到{ {1}}。
首先在for循环之外声明GlobalDataClass.dDataArray
,然后相应地在for循环中填充它而不是tempArray
:
GlobalDataClass.dDataArray
您无需在string filename = openFileDialog1.FileName;
string[] line = File.ReadAllLines(filename);
var arrayTemp = new double[line.Length, 2];
using (var reader2 = File.OpenText(@filename))
{
for (int i = 0; i < line.Length; i++)
{
string lines = reader2.ReadLine();
var data = lines.Split(',');
arrayTemp[i, 0] = double.Parse(data[0]);
arrayTemp[i, 1] = double.Parse(data[1]);
}
Array.Copy(arrayTemp, GlobalDataClass.dDataArray, line.Length); // now the error should go away.
}
子句中第二次读取该文件。
现在请尝试以下方法:
using()
答案 3 :(得分:1)
看起来你的数组超出了范围,因为它在for循环中被声明并且你试图在for循环之外访问它
答案 4 :(得分:0)
我已就此link
作出回答要将数组复制到另一个数组,只需使用“Clone()”函数,如下所示:
这是您的数组列表
object newArray = new object [row, column];
当您创建另一个数组时,请使用以下代码:
object[,] clonedArray = (object[,]) newArray.Clone();
简单!玩得开心!