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