Я ищу простой способ клонировать параметр IEnumerable<T> для последующей справки. LINQ ToArray метод расширения выглядит как хороший, лаконичный способ сделать это.
Однако я не понимаю, всегда ли гарантированно возвращать новый экземпляр массива. Некоторые из методов LINQ будут проверять фактический тип перечислимого и, если возможно, ярлык; например, Count() увидит, реализует ли метод ICollection<T>, и если да, то будет непосредственно читать свойство Count; он выполняет только итерацию коллекции, если она должна.
Учитывая, что мышление короткого замыкания там, где это практично, кажется, что, если я назову ToArray() на то, что уже является массивом, ToArray() может замыкаться и просто возвращать один и тот же экземпляр массива. Это технически выполнило бы требования метода ToArray.
Из быстрого теста выясняется, что в .NET 4.0 вызов ToArray() в массиве возвращает новый экземпляр. Мой вопрос: Я могу полагаться на это? Можно ли гарантировать, что ToArray всегда будет возвращать новый экземпляр даже в Silverlight и в будущих версиях .NET Framework? Есть ли документация где-то, что ясно в этой точке?