2011-03-16 17 views
13

Estos son los mismos:¿Qué es mejor, Enumerable.Empty <T> o nuevo [0]?

IEnumerable<string> i; 
i = Enumerable.Empty<string>(); 
i = new string[0]; 

Así, lo que para usar?

Creo que el primero comunica intenciones más claramente, pero es más grande y un poco más ruidoso, por no mencionar feo en el depurador. El segundo también es más eficiente en memoria y CPU, si leo Reflector a la derecha.

Me estoy inclinando hacia el new type[0], pero quería saber lo que todos piensan.

Respuesta

20

Enumerable.Empty<T> almacena en caché la matriz vacía, por lo que siempre se devolverá la misma matriz, mientras que la segunda instrucción creará una nueva matriz con cada llamada.

Tendería a Enumerable.Empty<T>, ya que muestra la intención del programador más claramente, y también porque usar una creación de matriz explícita debido al uso de memoria es una optimización prematura en un programa administrado, ya que el tiempo de ejecución casi siempre asignará más de memoria necesaria para el proceso de todos modos.

5

Me parece que Enumerable.Empty delegados a EmptyEnumerable que devuelve una matriz de longitud 0. Pero devuelve la misma cada vez, y mantiene esa matriz vacía viva para siempre.

7

La diferencia en términos de rendimiento/uso de la memoria es increíblemente insignificante en esta situación, por lo que ese no sería mi factor decisivo.

Usaría personalmente Enumerable.Empty, principalmente porque describe muy claramente la intención del desarrollador.