您需要了解的第一件事是 aList<T>
和 aT[]
不等价*(*见脚注)。您的代码似乎想将列表视为数组,但这行不通。
AList<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();
}
}
*除非您通过通用接口类型引用它们,在这种情况下它们仍然不等效但兼容,但这超出了此答案的范围,并且鉴于所涉及的代码片段,这在此上下文中并不是特别有用。