2011-01-18 3 views
23

String[] es liviana en comparación con list<string>. Entonces, si no tengo la necesidad de manipular mi colección, ¿debo usar string[] o siempre es recomendable ir al list<string>?Dónde utilizar la cadena [] frente a la lista <string> en C#

En caso de list<string>, ¿debemos realizar una comprobación nula o no es necesario?

+1

No necesita verificar ningún tipo de referencia, incluida la lista. –

+0

@ J.W. 1 punto arriba: para cualquier tipo de referencia, la verificación nula es obligatoria. – Biki

Respuesta

4

Yo diría que lo ha resumido bien usted mismo.

Si el tamaño de su lista no cambia y no necesita ninguna de las funciones avanzadas de la lista, como la clasificación, entonces String [] es preferible porque, como usted dice, es liviano.

Pero tenga en cuenta los posibles requisitos futuros: ¿es posible que algún día desee usar List para algo? Si es así, considere usar List ahora.

Debe comprobar nulo, tanto en Cadena [] como en Lista. Ambos tipos pueden tener un valor nulo.

+5

Haz lo más simple. Teniendo en cuenta que "qué * podría ser posiblemente el requisito algún día" es peligroso, me recuerda a Big-Design-Upfront :) –

+1

@Peter Aunque estoy de acuerdo, creo que esta es la manera de pensar en una aplicación empresarial. desarrollador, mientras que yo procedo de un componente de escritura de fondo donde debe considerar todo lo que los usuarios "podrían" querer hacer con su componente. Como alguien más ha sugerido, depende en gran medida del contexto. – Matt

+0

bueno, he visto código donde 'List' está salpicado por todas partes simplemente porque es conveniente. Con el resultado del bloqueo en la implementación. Si un componente, por ser emprendedor o no, entrega una lista de datos, el contrato y el propósito de ese componente deben dictar qué tipo de datos se debe devolver. Si el cliente necesita modificar la colección, solo se trata de actualizar una 'Lista'. –

32

Utilice string[] cuando necesite trabajar con matrices estáticas: no necesita agregar y eliminar elementos -> solo acceder a elementos por índice. Si necesita modificar la colección, use List<string>. Y si tiene la intención de recorrer solo los contenidos y nunca acceder por índice, use IEnumerable<string>.

+0

Lo siento, sé que esta es una publicación 'antigua', pero ¿puedes dar una razón por la cual usar la cadena [] en esa situación (o un enlace)? No encontré nada en MSDN sobre los profesionales de String [] en comparación con List . ¿Es mejor para matrices estáticas simplemente porque es más liviano? – Dave

+1

@DaveRook Tiene razón: List <> tiene una sobrecarga con las funciones e.t.c que puede proporcionar. String [] es una matriz simple, sin ninguna 'funcionalidad' adicional. Si desea velocidad y no necesita modificar dinámicamente la lista, use string []. –

+1

@NathanWhite, +1 de mí, ideas como esta son excelentes. – Dave

1

Esto realmente depende de la situación. Cualquier cosa realmente relacionada con el rendimiento debería hacerse con arreglos. Cualquier otra cosa iría con listas.

7

Si la colección no se debe modificar, use una cadena [] o incluso mejor, IEnumerable<string>. Esto indica que la colección de cadenas se debe tratar como una colección de cadenas de solo lectura.

El uso de IEnumerable<string> en su API también se abre para que la implementación subyacente se modifique sin romper el código del cliente. Puede usar fácilmente una matriz de cadenas como la implementación subyacente y exponerla como IEnumerable<string>. Si la implementación en una etapa posterior es más adecuada usando una lista u otra estructura, puede cambiarla siempre que sea compatible con IEnumerable<string>.

2

Yo diría que depende de lo que esté tratando de lograr. En general, sin embargo, mi opinión es que tiene acceso a un gran marco que hace mucho trabajo para usted, así que úselo (es decir, use List <> en lugar de array).

Echa un vistazo a los miembros que te ofrece una clase como List <> y verás lo que quiero decir: además de no tener que preocuparte tanto por la capacidad del array y el índice fuera de límites, List y otras clases de ICollection/IList le dan métodos como Agregar, Eliminar, Borrar, Insertar, Buscar, etc. que son infinitamente útiles. También creo

myList.Add (myWidg); 

es mucho más agradable de leer y mantener que

myArr [i] = myWidg; 
1

Sin duda, votar a favor de la lista. Además de las diversas funciones de miembros que admite una lista, proporciona el concepto de 'no elemento'. Puede haber una lista que no tenga elementos pero no puede haber una matriz sin elementos. Por lo tanto, si cumplimos con las mejores prácticas de no devolver nulo desde una función, entonces podemos verificar de forma segura el recuento del elemento sin hacer una comprobación nula. En el caso de una matriz, debemos verificar el nulo. Además, rara vez uso un bucle para buscar un elemento, ya sea en una matriz o en una lista. LINQ solo lo hace ordenado y podemos usarlo con List not array.La matriz se debe convertir a la lista para hacer uso de LINQ.

Cuestiones relacionadas