2013-03-28 65 views
0

我有一個生成按鈕的網格中的程序,我想這些按鈕保存在一個嵌套數組列表,但我這樣做似乎沒有正確的方式填入嵌套列表

這是我的代碼:

 List<List<Button>> buttonsList = new List<List<Button>>(); 
     List<Button[]> rowList = new List<Button[]>(); 

     //Some method that creates a grid of buttons 
     buttons = new Button[row][]; 
     for (int r = 0; r < row; r++) 
     { 
      buttons[r] = new Button[col]; 
      buttonsList.Add(rowList[r]);  
      for (int c = 0; c < col; c++) 
      { 
       buttons[r][c] = new Button(); 
       rowList[c].Add(buttons[r][c]); 
      } 
     } 
+0

對你想要做什麼和問題是什麼相當困惑。也許把buttonss變量改爲別的? buttonList? – RyPope 2013-03-28 00:56:50

+0

@RyPope將其更改爲 – Tacit 2013-03-28 00:57:59

回答

3

你需要了解的第一件事是,一個List<T>T[]是不等價的*(*見注)。你的代碼似乎想要將一個列表當作一個數組來處理,而這不會起作用。

一個List<List<Button>>可在下列方式使用:

var listOfLists = new List<List<Button>>(); 
var listOfButtons = new List<Button>(); 
listOfButtons.Add(new Button()); 
listOfLists.Add(listOfButtons); 

,您可以繼續給按鈕添加到按鈕列表,創建更多的按鈕列表,添加按鈕的,和所有的人都加入到列表列表,你可以在循環或嵌套循環中完成所有這些。

數組Button[][]的處理方式不同。它不是動態大小的,並且會以不同的方式使用。

var arrayOfArrays = new Button[10][]; 
var arrayOfButtons = new Button[3]; 
arrayOfButtons[0] = new Button(); 
arrayOfButtons[1] = new Button(); 
arrayOfButtons[2] = new Button(); 
arrayOfArrays[0] = arrayOfButtons; 

然後你仍然有9個更多的按鈕數組(在這個例子中)。

您的代碼嘗試將一組按鈕添加到期望按鈕列表的列表中。還有其他一些項目需要排序,但基本思想是您將這兩個不同的集合混合在一起,編譯器大聲抱怨。

要解決您的代碼,首先要爲您需要做的事情采用適當的類型,然後在您的邏輯中始終如一地正確使用這些類型。

作爲首發,看看你用這些片段得到了多少。

// using List<List<Button>> 

var buttonLists = new List<List<Button>>(); 

for (int r = 0; r < row; r++) 
{ 
    var buttonRow = new List<Button>(); 
    buttonLists.Add(buttonRow);  
    for (int c = 0; c < col; c++) 
    { 
     buttonRow.Add(new Button()); 
    } 
} 

// using Button[][] 

var buttonArrays = new Button[row][]; 

for (int r = 0; r < row; r++) 
{ 
    buttonArrays[r] = new Button[col]; 
    for (int c = 0; c < col; c++) 
    { 
     buttonArrays[r][c] = new Button(); 
    } 
} 

*除非你是通過一個共同的接口類型引用它們,在這種情況下,他們仍然是不等價的,但兼容,但超出這個答案的範圍,而不是特別有用在這種情況下,給定代碼片段。

+0

您能否將此代碼與我的代碼相集成 – Tacit 2013-03-28 01:03:47

+0

請參閱包含類似* something *的代碼片段的更新,這些代碼片段可能會幫助您入門。 – 2013-03-28 01:17:57