2009-06-22 53 views
5

你好,我有一個C#數組的問題。我需要一個陣列的一些數據存儲在那裏... 我的代碼是定義一個沒有固定大小的雙數組?

double[] ATmittelMin; 
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax); 

但是編譯器說:沒有定義VAR 我如何定義沒有一個固定大小的雙數組? 非常感謝!

回答

15

陣列始終固定在大小,並且已經對像這樣被定義:

double[] items1 = new double[10]; 

// This means array is double[3] and cannot be changed without redefining it. 
double[] items2 = {1.23, 4.56, 7.89}; 

List<T>類使用陣列中的背景和重新定義它,當它運行的空間:

List<double> items = new List<double>(); 
items.Add(1.23); 
items.Add(4.56); 
items.Add(7.89); 

// This will give you a double[3] array with the items of the list. 
double[] itemsArray = items.ToArray(); 

您可以通過List<T>迭代就像你的數組:

foreach (double item in items) 
{ 
    Console.WriteLine(item); 
} 

// Note that the property is 'Count' rather than 'Length' 
for (int i = 0; i < items.Count; i++) 
{ 
    Console.WriteLine(items[i]); 
} 
+0

如何遍歷列表 – subprime 2009-06-22 09:04:41

+0

@subprime:foreach(項目中的雙項){...},或通過項目[n]索引器 – 2009-06-22 09:08:50

0

從我看到的你沒有聲明zaehlMittel變量。我想這是編譯器抱怨的。

除此之外,即使您當然可以以編程方式確定該變量的值,但您要創建數組的大小必須是已知的。這是數組工作的方式。

如果你無法輕鬆做到這一點,我建議使用某種動態數據結構,如列表或集合。然後,一旦添加了所有元素,您當然仍然可以自由地創建一個數組,因爲那時您知道元素的數量(即使有便利的方法,如toArray()甚至可以處理這個問題)。

0

你必須在使用前實例化數組:

double[] ATmittelMin = new double[10]; 
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax); 
0

是彈簧想到顯而易見的解決方案是使用一個列表:

List<double> ATmittelMin = new List<double>(); 
ATmittelMin.Add(Gradient(x, xATMax, y, yATMax); 

但是,如果你不想轉換從列表到陣列,您可以稍後再增大陣列:

double[] ATmittelMin = new double[10]; 
// Some code 
int index = some_value; 
if (index >= TmittelMin.Length) 
{ 
    Array.Resize(ATmittelMin, index+5); // So we're not constantly resizing the array 
} 

這並不理想,因爲您正在進行大量List正在幕後做的工作 - 可能比你能做得更有效率。