在C#中复制2D数组

时间:2014-02-20 02:31:35

标签: c# multidimensional-array

我有一个代码将数据存储到临时数组中。

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复制到全局类数组。 知道如何解决这个问题吗?

5 个答案:

答案 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

编辑2:

您无需在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();

简单!玩得开心!