2010-07-24 2 views
4

Мне нужно собрать список списков, но вся идея не кажется слишком красивой. Это просто звучит так громоздко. есть ли другой шаблон для хранения списка списков.делает список списков плохой запах, какие у меня другие варианты

мой первый, хотя это использовать arrayList Arraylist.

C#, .net-2

больше: то количество элементов, которые будут сохранены небольшой, но всегда меняется.

Примечание: я была исправлена ​​на использовании ArrayLists по этому вопросу:

What's wrong with using an ArrayList in .net-2.0

+0

Никогда пользователь ArrayList. – tster

+2

Я видел этот комментарий раньше. что не так с arraylist – fishhead

+0

Отсутствие типа безопасности. – recursive

ответ

6

Там нет ничего плохого с List<List<T>> - LINQ-х SelectMany может быть вашим другом в этой ситуации.

+1

Хотя комментарий действителен (и получает +1), LINQ доступен только в 3.5 и выше, но в списке версии 2.0. –

+0

Он говорит, что это .Net 2.0. – DOK

+0

Вы можете использовать LinqBridge (или аналогичный) для Linq для объектов в .Net 2.0 – DaveShaw

1

Не проблема вообще. Я уже использовал его, и он был подходящим для того, что мне нужно в то время. Шаблон - это список списков. :)

1

Список списков сам по себе не является плохим запахом. Если ваши списки будут иметь одинаковый размер, вы можете использовать 2D-массив, например. int[2,2], но если списки имеют разную длину, то список списков - это правильный путь, за исключением формального кодирования класса для оборванного 2D-массива.

+0

Вы также можете использовать неровные массивы в C# напрямую - не нужно «формально кодировать класс для оборванного 2D-массива» - массивы с зубцами поддерживаются уже в C# , –

2

Как насчет использования объектов, созданных в пользовательских классах?

Например, клиенты могут иметь несколько адресов. Создайте объект Customer, у которого есть свойство Address. Затем вы можете иметь коллекцию (массив, ArrayList и т. Д.) Клиентов, и каждый Клиент может иметь коллекцию Адресов.

Это подходит для многих видов информации, таких как продукты в категориях продуктов, сотрудники отделов.

Это проще в кодировании для обработки иерархических отношений таким образом.

2

вы можете, но лучше обернуть его в класс с помощью общедоступных методов.

1

Вы, безусловно, можете сделать это, используя общие списки или не общий вариант ArrayList.

List<List<string>> listOfLists = new List<List<string>>(); 
listOfLists.Add(new List<string>()); 
listOfLists.Add(new List<string>()); 

ArrayList stringListOfStringLists = new ArrayList(); 
stringListOfStringLists.Add(new ArrayList()); 
stringListOfStringLists.Add(new ArrayList()); 
+1

-1 для обозначения того, что ArrayList является опцией. Правило большого пальца, никогда не используйте ArrayList. – tster

+3

Почему бы и нет? В чем проблема с ArrayList? –

+1

@John Kugelman - Тип безопасности, бокс и расходы на распаковку, т. Е. Производительность –

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