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

Довольно смущенный тем, что вы пытаетесь сделать и в чем проблема. Возможно, измените переменную кнопок на что-то еще? buttonList? – RyPope

+0

@RyPope изменил его – Tacit

ответ

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

+0

См. Обновление, которое включает в себя фрагменты, похожие на * something *, которые могут помочь вам приступить к работе. –

Смежные вопросы