Я видел этот ответ Джона на Инициализировать универсальный объект неизвестным типом:
If you want a single collection to contain multiple unrelated types of values, however, you will have to use
List<object>
Я сравниваю не ArrayList и List<>, а ArrayList и List<object>, поскольку оба будут отображать элементы типа object. Какая польза от использования любого из них в этом случае?
Обновлено: здесь нет заботы о безопасности типов, поскольку оба класса выставляют object в качестве своего элемента. Еще нужно привести object к желаемому типу. Меня больше интересует все, кроме безопасности типов.
Обновлено: Спасибо Марку Гравеллу и Шону за ответ. Извините, я могу выбрать только 1 в качестве ответа, поэтому я проголосую за оба.





List <> - это типизированная версия ArrayList. Это гарантирует, что вы получите в коллекции тот же тип объекта.
Да, общие коллекции могут быть не только типизированными, но и быстрее.
Из MSDN (http://msdn.microsoft.com/en-us/library/system.collections.generic.aspx)
The System.Collections.Generic namespace contains interfaces and classes that define generic collections, which allow users to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections.
List<object> не дает вам особых улучшений в отношении безопасности типов и производительности по сравнению с использованием ArrayList. Большинство этих улучшений специфичны для List<T>, где T - это что угодно, кроме object.
Одним из больших преимуществ использования List<object> является то, что в наши дни большая часть кода написана для использования общих классов / интерфейсов. Я подозреваю, что в наши дни большинство людей напишут метод, который использует IList<object> вместо IList. Поскольку ArrayList не реализует IList<object>, вы не сможете использовать список массивов в этих сценариях.
Я склонен думать о неуниверсальных классах / интерфейсах как о устаревшем коде и по возможности избегаю их.
В этом случае, если сравнивать ArrayList с List<Object>, то разницы в скорости вы не заметите. Могут быть некоторые различия в фактических методах, доступных для каждого из них, особенно в .NET 3.5 и методах подсчета расширений, но это больше связано с тем, что ArrayList несколько устарел, чем что-либо еще.
Вы сможете использовать методы расширения LINQ напрямую с List<object>, но не с ArrayList, если вы не вставите Cast<object>() / OfType<object> (спасибо IEnumerable<object> против IEnumerable). Это стоит немало, даже если вам не нужна безопасность типов и т. д.
Скорость будет примерно такой же; структуры по-прежнему будут помещены в коробку и т. д., поэтому больше не о чем их различать. За исключением того, что я склонен рассматривать ArrayList как «ой, кто-то снова пишет устаревший код ...» ;-p
Проведите сравнительный анализ, и вы узнаете, что работает лучше всего. Я предполагаю, что разница очень небольшая.
на самом деле я не уверен, что вопрос в производительности, но это хороший момент. я предполагаю, что производительность arraylist будет хуже из-за дополнительной упаковки, распаковки.
@ Анонимный: Какой дополнительный бокс? ArrayList и List<object> должны иметь одинаковое количество боксов / распаковок.
«одна коллекция, содержащая несколько несвязанных типов значений» - я понял, что при добавлении разных типов к объекту коллекции List происходила упаковка / распаковка, тогда как с arraylist этого не было. Думаю, я ошибаюсь в этом.
Очевидно, я не имею в виду безопасность типов здесь