ArrayList vs List <объект>

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

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

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

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

EDIT: Спасибо, Марк Гравелл и Шон за ответ. Извините, я могу выбрать только 1 в качестве ответа, поэтому я проголосую за оба.

Ответ 1

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

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

Ответ 2

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

Я склонен думать о не-общих классах/интерфейсах как устаревшем коде и избегать их, когда это возможно.

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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