2010-02-24 8 views

Respuesta

6

No está garantizado en el sentido de que no lo dice en la documentación, sin embargo, si observa cómo está implementado actualmente , entonces sí, siempre volverá en el mismo orden.

Así es como está implementado actualmente :

public List<T> FindAll(Predicate<T> match) 
{ 
    if (match == null) 
    { 
     ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match); 
    } 
    List<T> list = new List<T>(); 
    for (int i = 0; i < this._size; i++) 
    { 
     if (match(this._items[i])) 
     { 
      list.Add(this._items[i]); 
     } 
    } 
    return list; 
} 

Como se puede ver, es un simple bucle for que secuencialmente pasa a través de la lista y añade los elementos que coinciden.

+1

¿A qué implementación se refiere? .net 2.0, 3.5, 4.0, mono? :) – Rob

+0

@Rob: buen punto :) Adjunté la implementación actual de .Net 3.5. – BFree

+1

Confiar en las partes internas del código de otra persona no me parece una buena idea. – brian

2

Por lo que puedo decir de la documentación List<T>.FindAll, el orden de los elementos devueltos no se especifica, por lo tanto, si lo hace actualmente, se trata de un detalle de implementación que está sujeto a cambios.

En resumen, sí, el pedido podría ser diferente.

4

La implementación actual conservará el orden.

Dicho esto, no hay nada en el documentation que garantice que esto siempre preservará el orden. Es posible que una versión futura podría, teóricamente, enhebrar esta rutina, o alguna otra función similar, lo que rompería el orden. No confiaría en que la orden se preservara.

0

MSDN dice que se realiza una búsqueda lineal, aunque no dice explícitamente que está garantizado que está en el mismo orden.

+0

La búsqueda lineal se refiere a la eficacia del algoritmo utilizado y no proporciona información con respecto a si el algoritmo conserva o no el orden. – RAL

1

La documentación para List<T>.FindAll no hace explícitamente esta garantía. Alude a que se ordenó. Lo más importante es que la implementación del método devuelve una lista ordenada y me resulta difícil creer que se cambiará a cualquier otra cosa. Simplemente rompería a muchas personas. La falta de una redacción explícita en la documentación es probablemente un descuido.

Cuestiones relacionadas