2013-03-28 72 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