ArrayList против списка <object> - PullRequest
       27

ArrayList против списка <object>

46 голосов
/ 24 декабря 2008

Я видел этот ответ от Джона на Инициализировать универсальный объект с неизвестным типом :

Если вы хотите одну коллекцию содержат несколько не связанных типов значения, однако, вам придется использовать List<object>

Я не сравниваю ArrayList против List<>, но ArrayList против List<object>, так как оба будут экспонировать элементы типа object. Какая польза от использования одного из них в этом случае?

РЕДАКТИРОВАТЬ: Это не заботится о безопасности типов здесь, так как оба класса выставляют object как свой элемент. Еще нужно привести от object к желаемому типу. Меня больше интересует что угодно, кроме безопасности типов.

РЕДАКТИРОВАТЬ: Спасибо Марк Гравелл и Шон за ответ. Извините, я могу выбрать только 1 в качестве ответа, поэтому я проголосую за обоих.

Ответы [ 6 ]

73 голосов
/ 24 декабря 2008

Вы сможете использовать методы расширения LINQ непосредственно с List<object>, но не с ArrayList, если вы не введете Cast<object>() / OfType<object> (благодаря IEnumerable<object> против IEnumerable). Это стоит совсем немного, даже если вам не нужна безопасность типов и т. Д.

Скорость будет примерно одинаковой; структуры по-прежнему будут в штучной упаковке и т. д., так что больше нечего их различать. За исключением того, что я склонен видеть ArrayList как "упс, кто-то снова пишет устаревший код ..."; -p

41 голосов
/ 24 декабря 2008

Одно большое преимущество использования List<object> состоит в том, что в наши дни большая часть кода написана для использования универсальных классов / интерфейсов. Я подозреваю, что в наши дни большинство людей пишут метод, который принимает IList<object> вместо IList. Поскольку ArrayList не реализует IList<object>, вы не сможете использовать список массивов в этих сценариях.

Я склонен считать неуниверсальные классы / интерфейсы устаревшим кодом и по возможности избегать их.

11 голосов
/ 24 декабря 2008

В этом случае ArrayList против List<Object>, тогда вы не заметите никаких различий в скорости. Могут быть некоторые различия в фактических методах, доступных для каждого из них, особенно в .NET 3.5 и методах подсчета, но это больше связано с тем, что ArrayList несколько устарел, чем все остальное.

5 голосов
/ 24 декабря 2008

Да, помимо типобезопасности, общие коллекции могут быть на самом деле быстрее.

Из MSDN (http://msdn.microsoft.com/en-us/library/system.collections.generic.aspx)

System.Collections.Generic Пространство имен содержит интерфейсы и классы, которые определяют общие коллекции, которые позволяют пользователям создавать строго типизированные коллекции, которые обеспечить лучшую безопасность типа и производительность, чем не является универсальным сильно печатные коллекции.

1 голос
/ 24 декабря 2008

Сделайте несколько тестов, и вы узнаете, что работает лучше всего. Я предполагаю, что разница очень мала.

0 голосов
/ 24 декабря 2008

List <> - это типизированная версия ArrayList. Это гарантирует, что вы получите тот же тип объекта в коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...