你需要了解的第一件事是,一个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();
}
}
*除非你是通过一个共同的接口类型引用它们,在这种情况下,他们仍然是不等价的,但兼容,但超出这个答案的范围,而不是特别有用在这种情况下,给定代码片段。
对你想要做什么和问题是什么相当困惑。也许把buttonss变量改为别的? buttonList? – RyPope 2013-03-28 00:56:50
@RyPope将其更改为 – Tacit 2013-03-28 00:57:59