Pourquoi ArrayList n’est-il pas marqué ?

Après une reflection approfondie et un examen de l’implémentation de ArrayList , personnellement, je veux vraiment dire que c’est obsolète, je n’ai aucune raison d’utiliser cette classe après 2.0 . Mais comme il n’est pas marqué comme [Obsolete] , y a-t-il un usage que je ne connaissais pas, mieux que d’utiliser une classe générique? Si oui, veuillez donner un exemple. Merci.

EDIT Prenons List comme exemple, il fournit toutes les fonctions de ArrayList , et il est fortement typé. Alors, quand devons-nous utiliser ArrayList ? Peut-être que parfois il a de meilleures performances? Je ne sais pas. J’apprécie si vous pouvez me montrer quelque chose de spécial de ArrayList .

Je pense que cela devrait être considéré comme obsolète pour le nouveau code, mais il n’ya aucune raison impérieuse de le marquer comme obsolète et de créer des avertissements dans tous les codes écrits avant la publication de la version 2.0.

Dans mon expérience, la plupart des types et des membres qui ont été marqués comme obsolètes par Microsoft sont activement dangereux à certains égards et devraient vraiment être corrigés si vous en avez toujours un. Bien que l’utilisation de ArrayList soit pénible et (au moins théoriquement) propice à la découverte de bogues liés aux types au moment de l’exécution plutôt qu’au moment de la compilation, le type fait assez bien son travail … C’est le genre de changement que je considérerais généralement lorsque je travaillais déjà sur une zone de code utilisant ArrayList , plutôt que de rechercher activement chaque utilisation.

En fait, il est complètement supprimé de Silverlight – l’intention est donc là. Vraisemblablement, il y a tout simplement trop d’ancien code existant pour .NET classique qui utilise ArrayList pour le rendre obsolète, d’autant plus que beaucoup de personnes utilisent des avertissements en tant qu’erreurs.

Vous ne devriez pas l’utiliser dans un nouveau code sans raison valable.

Ce n’est pas “obsolète” en soi. C’est “obsolète” comme une voiture début 70 ’80 . Si je devais choisir entre une List et une ArrayList il y a une très petite possibilité d’utiliser une ArrayList … Oublie-la … Elle n’implémente pas IEnumerable , donc pour utiliser Linq je le ferais utiliser un OfType() .

Pour faire un exemple:

 var aaa = new ArrayList(); var aaaa = aaa.OfType().Where(p => p != null); var bbb = new List; var bbbb = bbb.Where(p => p != null); 

Quelqu’un a finalement accepté ma réponse, alors j’appendai quelque chose 🙂

Si vous aviez demandé “utiliseriez-vous une collection non générique”, ma réponse aurait été différente. Le Hashtable a une propriété intéressante:

Hashtable est compatible avec les threads pour une utilisation par plusieurs threads de lecteur et un seul thread d’écriture. Il est thread-safe pour une utilisation multi-thread quand un seul des threads exécute des opérations d’écriture (update), ce qui permet des lectures sans verrou à condition que les auteurs soient sérialisés sur Hashtable.

Donc, il y a des endroits où une Hashtable devrait être meilleure qu’un lock + Dictionary ou un ConcurrentDictionary (mais vous devriez le comparer)