index - obtener posicion de un arraylist c#
¿Por qué no está marcado ArrayList[Obsoleto]? (3)
Después de una reflexión profunda y observar la implementación de ArrayList
, personalmente quiero decir que está obsoleto, no tengo motivos para usar esta clase después de 2.0 . Pero dado que no está marcado como [Obsolete]
, ¿hay algún uso que yo no sepa, mejor que usar una clase genérica? Si es así, por favor dé un ejemplo. Gracias.
EDITAR Tomemos List<T>
como ejemplo, proporciona todas las funciones de ArrayList
, y está fuertemente tipado. Entonces, ¿cuándo necesitamos usar ArrayList
? Tal vez a veces tiene un mejor rendimiento? No lo sé. Agradezco si me puedes mostrar algo especial de ArrayList
.
Creo que debería considerarse obsoleto para el nuevo código, pero no hay una razón convincente para marcarlo como obsoleto y crear advertencias en todo el código que se escribió antes de que se lanzara 2.0.
En mi experiencia, la mayoría de los tipos y miembros que Microsoft marcó como obsoletos son activamente peligrosos en algún aspecto, y realmente deberían corregirse si aún tiene una base de código que los usa. Si bien ArrayList
es doloroso y (al menos teóricamente) propenso a descubrir errores relacionados con el tipo en el tiempo de ejecución en lugar de compilar, el tipo hace su trabajo lo suficientemente bien ... a menudo no hay una razón convincente para cambiar el código existente. Es el tipo de cambio que generalmente considero cuando ya estaba trabajando en un área de código que usaba ArrayList
, en lugar de buscar activamente cada uso de él.
En realidad, está completamente eliminado de Silverlight, por lo que la intención está ahí. Es de suponer que simplemente hay demasiado código antiguo existente para .NET regular que usa ArrayList
para obsoleto, especialmente porque muchas personas corren con warnings-as-errors.
No debe usarlo en un nuevo código sin una buena razón.
No es "obsoleto" per se. Es "obsoleto" como un automóvil de ''70 ''80 de principios de ''90. Si tuviera que elegir entre una List<Object>
y una List<Object>
ArrayList
existe una posibilidad MUY PEQUEÑA de que use una IEnumerable<Object>
... Olvídalo ... No implementa IEnumerable<Object>
, así que para usar Linq lo haría tiene que usar un OfType<Object>()
.
Para hacer un ejemplo:
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);
Finalmente, alguien superó mi respuesta, así que le agregaré algo :-)
Si hubiera preguntado "¿usaría alguna colección no genérica?", Mi respuesta habría sido diferente. El Hashtable tiene una propiedad interesante:
Hashtable es seguro para subprocesos para ser utilizado por varios subprocesos de lector y un solo hilo de escritura. Es seguro para subprocesos para uso de subprocesos múltiples cuando solo uno de los subprocesos realiza operaciones de escritura (actualización), lo que permite lecturas sin bloqueos siempre que los escritores se serialicen a la Hashtable.
Entonces, hay lugares en los que un Hashtable
debería ser mejor que un lock + Dictionary
o un ConcurrentDictionary
(pero habría que compararlo)