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