我有一个生成按钮网格的程序,我想将这些按钮存储在嵌套数组列表中,但我正在做的方式似乎不正确
这是我的代码:
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 :(得分: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);
您可以继续向按钮列表添加按钮,创建更多按钮列表,向这些按钮添加按钮,并将所有按钮添加到列表列表中,您可以在循环或嵌套循环中完成所有这些操作。 / p>
对数组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();
}
}
*除非您通过通用接口类型引用它们,在这种情况下它们仍然不等同但是兼容,但这超出了本答案的范围,并且在这方面没有特别用处上下文,给出了涉及的代码片段。