Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top