C# 填充嵌套列表
我有一个生成按钮网格的程序,我想将这些按钮存储在一个嵌套的数组列表中,但我的方式似乎不正确 这是我的代码:C# 填充嵌套列表,c#,winforms,visual-studio-2010,arraylist,C#,Winforms,Visual Studio 2010,Arraylist,我有一个生成按钮网格的程序,我想将这些按钮存储在一个嵌套的数组列表中,但我的方式似乎不正确 这是我的代码: List<List<Button>> buttonsList = new List<List<Button>>(); List<Button[]> rowList = new List<Button[]>(); //Some method that creates a
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]);
}
}
List按钮列表=新建列表();
List rowList=新列表();
//创建按钮网格的某些方法
按钮=新按钮[行][];
对于(int r=0;r|
您需要了解的第一件事是列表和T[]
不是等价的*(*参见脚注)。您的代码似乎希望将列表视为数组,但这样做行不通
列表可以以下列方式使用:
var listOfLists = new List<List<Button>>();
var listOfButtons = new List<Button>();
listOfButtons.Add(new Button());
listOfLists.Add(listOfButtons);
然后,您仍然可以设置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();
}
}
//使用列表
var buttonList=新列表();
对于(int r=0;r|
*除非您通过通用接口类型引用它们,否则在这种情况下,它们仍然不是等价的,而是兼容的,但鉴于所涉及的代码片段,这超出了本答案的范围,并且在本上下文中不是特别有用。您需要了解的第一件事是列表和t[]
不等同*(*见脚注)。您的代码似乎希望将列表视为数组,但这样做行不通
列表可以以下列方式使用:
var listOfLists = new List<List<Button>>();
var listOfButtons = new List<Button>();
listOfButtons.Add(new Button());
listOfLists.Add(listOfButtons);
然后,您仍然可以设置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();
}
}
//使用列表
var buttonList=新列表();
对于(int r=0;r|
*除非您通过通用接口类型引用它们,否则在这种情况下,它们仍然不是等价的,而是兼容的,但鉴于所涉及的代码片段,这超出了本答案的范围,在这种情况下也不是特别有用。对于您试图做什么以及问题是什么,您感到相当困惑。也许将buttonss变量更改为其他变量?按钮列表?对你想做什么和问题是什么相当困惑。也许将buttonss变量更改为其他变量?按钮列表?请参阅包含可能有助于您入门的代码片段的更新。请参阅包含可能有助于您入门的代码片段的更新。