Je lisais une question demandant Est-il préférable d'appeler ToList() ou ToArray() dans les requêtes LINQ ? et je me suis retrouvé à me demander pourquoi Enumerable.ToArray()
ne devrait pas d'abord appeler le Count()
pour trouver la taille de la collection au lieu d'utiliser la méthode interne Buffer{T}
qui se redimensionne dynamiquement. Quelque chose comme ce qui suit :
T[] ToArray<T>(IEnumerable<T> source)
{
var count = source.Count();
var array = new T[count];
int index = 0;
foreach (var item in source) array[index++] = item;
return array;
}
Je sais que nous ne pouvons pas comprendre ce qui se passe dans l'esprit des concepteurs et des responsables de la mise en œuvre et je suis sûr qu'ils sont beaucoup plus intelligents que moi. La meilleure façon de poser cette question est donc de se demander ce qui ne va pas avec l'approche présentée ci-dessus. Il semble qu'il y ait moins d'allocation de mémoire et qu'elle fonctionne toujours en temps O(n).