[英]Copy 2D Array in C#
我有一个将数据存储到临时数组的代码。
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
方法将临时数组复制到Global类数组。 但是我在上面的代码中注释了一个错误。
我的问题是如何将tempArray
复制到全局类数组。 任何想法如何解决这个问题?
问题:您已在for循环内声明了数组变量arrayTemp
,但在其外部不可用。
解决方案:您需要将数组变量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);
}
你tempArray
超出的范围 ,你Array.Copy
,因为它是你的for循环,你需要将它移动到你的方法调用的范围,所以,方法可以访问它里面。 (类似于在其他地方声明GlobalDataClass.dDataArray
方式)
//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.
}
{}层次结构中“更深”的语句只能由其中的语句以及其中的其他子作用域访问。 原始括号之外的父范围无法访问变量。
似乎您正在尝试将arrayTemp
的内容复制到GlobalDataClass.dDataArray
,但是您正在将值分配给GlobalDataClass.dDataArray
,并且试图将空的arrayTemp
复制到GlobalDataClass.dDataArray
。
因此,首先在for循环外声明tempArray
,然后相应地在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()
子句中第二次读取文件。
现在,请尝试以下操作:
string filename = openFileDialog1.FileName;
string[] line = File.ReadAllLines(filename);
var arrayTemp = new double[line.Length, 2];
for (int i = 0; i < line.Length; i++)
{
var data = line[i].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.
看起来您的数组超出范围,因为它在for循环内声明,并且您试图在for循环外访问它
我已经在此链接上回答了
要将数组复制到另一个数组,只需使用“ Clone()”函数,如下所示:
这是您的阵列清单
object newArray = new object [row, column];
当创建另一个数组时,只需使用以下代码:
object[,] clonedArray = (object[,]) newArray.Clone();
简单! 玩得开心!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.