Pregunta

Dicho de otra manera:

Hay una buena razón para elegir libremente-escribió la colección de más de un tipo de seguro (HashTable vsDiccionario)?Ellos todavía están allí sólo para compatibilidad?

Como tengo entendido, colecciones genéricas no sólo son de tipo seguro, pero su rendimiento es mejor.


He aquí un completo artículo sobre el tema: Un Amplio estudio de las Estructuras de Datos con C# 2.0.

¿Fue útil?

Solución

La no-colecciones genéricas son tan obsoletos que han sido retirados de la CoreCLR utilizado en Silverlight y Live Mesh.

Otros consejos

También hay problemas con el COM visibilidad - interoperabilidad COM no puede ser utilizado con los genéricos

En adelante solamente colecciones genéricas deben ser utilizados.También existe el beneficio de evitar boxing/unboxing de tipos en la colección.Este es ineffecient, especialmente cuando usted tiene una colección de tipos de valor que se convierten al Sistema.Objeto cuando se almacenan en la colección, por lo tanto el almacenamiento de los valores en el montón en lugar de la pila de llamadas.

Con respecto a la utilización de los no-colecciones genéricas para el almacenamiento de colecciones heterogéneas de cosas, siempre se puede usar la Lista<object> para lograr la misma cosa.Por esta sola razón, yo diría que casi no hay ninguna razón en absoluto para tocar la no-colecciones genéricas nunca más.

La excepción a esto sería para mantener la compatibilidad con los sistemas escritos en otros idiomas, o en contra de las versiones anteriores de el .NET framework, pero que es muy "nervioso" caso si usted me pregunta.

Te puedo decir que el XAML de la serialización de las colecciones que dependen de ellos para implementar IList o IDictionary, por lo que no colecciones genéricas van a estar con nosotros durante algún tiempo.

Yo no saltar y decir que son obsoletas o van a ser removidos en cualquier momento pronto.Es cierto que se debe evitar el uso de no-colecciones genéricas a menos que tenga una razón no no utilice una versión genérica.Miles de líneas de legado (no tan antiguos) código todavía está flotando alrededor (y será por muchos años) que apoyan la no-colecciones genéricas tales como ArrayLists.Ya que estos fueron los sólo colecciones en .NET 1.0 y 1.1, que ha sido ampliamente usado (y abusado) durante todo el año.

Todavía de vez en cuando tienen que interactuar con un viejo S/R mapper escrita .NET 1.1 que devuelve IList objetos.Tengo un método que realiza la conversión a una Lista genérica<>, que no es eficiente, pero esa es la manera que es.

Y si usted necesita para almacenar diferentes objetos en la misma matriz (raro, pero posible) que se necesita una colección genérica.La pena de Boxing y Unboxing es algo que usted tendrá que pagar de todos modos.

No tenga miedo de usar si usted siente que usted tiene que.

Puede haber casos en que usted necesita para almacenar objetos de tipo desconocido, o los objetos de varios tipos diferentes, pero si de hecho se sabe que el tipo de los objetos que desea almacenar entonces no veo motivo para no usar la versión genérica.

Editar:Como se ha comentado usted puede utilizar List<Object> - doh!

Sí, entiendo que están ahí sólo para la compatibilidad con los productos existentes.Usted siempre debe usar el tipo de versión segura (es decir,el uso del Sistema.Las colecciones.Genérico sobre el Sistema.Colecciones).

http://msdn.microsoft.com/en-us/library/ms379564.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top