[英]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.