Почему ArrayList не помечен как устаревший?

После глубоких размышлений и изучения реализации ArrayList Лично я действительно хочу сказать, что он устарел, у меня нет причин использовать этот класс после 2.0. Но так как он не помечен как [Obsolete], есть ли использование, которое я не знал, лучше, чем использование универсального класса? Если да, приведите пример. Благодарю.

РЕДАКТИРОВАТЬ Давайте возьмем List<T> в качестве примера, он предоставляет все функции ArrayListи это сильно напечатано. Итак, когда нам нужно использовать ArrayList? Может быть, иногда он имеет лучшую производительность? Я не знаю. Я ценю, если вы можете показать мне что-то особенное ArrayList,

3 ответа

Решение

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

По моему опыту, большинство типов и членов, которые были помечены Microsoft как устаревшие, в некотором отношении активно опасны, и их действительно следует исправить, если у вас все еще есть кодовая база, использующая их. При использовании ArrayList является болезненным и (по крайней мере теоретически) склонным к обнаружению связанных с типом ошибок во время выполнения, а не во время компиляции, тип выполняет свою работу достаточно хорошо... часто действительно нет веских причин для изменения существующего кода. Это такое изменение, которое я обычно рассматривал, когда уже работал над областью кода, которая использовала ArrayListвместо того, чтобы активно искать каждое использование этого.

На самом деле он полностью удален из Silverlight - так что намерение есть. Предположительно, существует слишком много старого существующего кода для обычного.NET, который использует ArrayList устареть, особенно потому, что многие люди используют предупреждения как ошибки.

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

Это не "устарело" само по себе. Он "устарел" как автомобиль 70-80- х годов ранних 90-х. Если бы мне пришлось выбирать между List<Object> и ArrayList существует ОЧЕНЬ ОЧЕНЬ МАЛЕНЬКАЯ возможность, я бы использовал ArrayList... Забудь об этом... Он не реализует IEnumerable<Object> поэтому, чтобы использовать Linq, я должен был бы использовать OfType<Object>(),

Чтобы сделать пример:

var aaa = new ArrayList();
var aaaa = aaa.OfType<object>().Where(p => p != null);

var bbb = new List<object>;
var bbbb = bbb.Where(p => p != null);

Кто-то, наконец, проголосовал против моего ответа, поэтому я добавлю кое-что к нему:-)

Если бы вы спросили "вы бы использовали какую-нибудь неуниверсальную коллекцию", мой ответ был бы другим. У Hashtable есть интересное свойство:

Hashtable является потокобезопасным для использования несколькими потоками читателей и одним потоком записи. Потокобезопасен для многопоточного использования, когда только один из потоков выполняет операции записи (обновления), что позволяет выполнять чтение без блокировки при условии, что записывающие устройства сериализуются в Hashtable.

Так что есть места, где Hashtable должно быть лучше, чем lock + Dictionary или ConcurrentDictionary (но вы бы должны сравнить его)

Другие вопросы по тегам