Je suis à la recherche d'un moyen facile de cloner un paramètre IEnumerable<T>
pour référence ultérieure. La méthode d'extension ToArray
de LINQ semble être une façon agréable et concise de le faire.Puis-je me fier au LINQ ToArray() retournant toujours une nouvelle instance?
Cependant, je ne sais pas s'il est toujours garanti de retourner une nouvelle instance de tableau. Plusieurs des méthodes LINQ vérifieront le type réel de l'énumérable, et le raccourci si possible; Par exemple, Count()
verra si la méthode implémente ICollection<T>
, et si oui, lira directement sa propriété Count
; il ne fait qu'itérer la collection s'il le faut.
Étant donné cet état d'esprit de court-circuit lorsque cela est possible, il semble que, si je l'appelle ToArray()
sur quelque chose qui est déjà un tableau, ToArray()
pourrait court-circuit et retourner simplement la même instance de tableau. Cela répondrait techniquement aux exigences d'une méthode ToArray
. A partir d'un test rapide, il apparaît que, dans .NET 4.0, l'appel ToArray()
sur un tableau renvoie une nouvelle instance. Ma question est: puis-je m'en remettre? Puis-je avoir la certitude que ToArray
retournera toujours une nouvelle instance, même dans Silverlight et dans les futures versions de .NET Framework? Y a-t-il de la documentation quelque part qui soit claire sur ce point?
+1 pour l'idée de test unitaire. – NerdFury