IEnumerable<T>後で参照できるように、パラメーターのクローンを作成する簡単な方法を探しています。LINQのToArray拡張メソッドは、これを行うための優れた簡潔な方法のようです。
ただし、常に新しい配列インスタンスを返すことが保証されているかどうかはわかりません。LINQメソッドのいくつかは、列挙可能なものの実際のタイプをチェックし、可能であればショートカットをチェックします。たとえば、Count()メソッドがを実装ICollection<T>しているかどうかを確認し、実装している場合は、そのCountプロパティを直接読み取ります。必要な場合にのみコレクションを繰り返します。
実用的な場合の短絡の考え方を考えると、ToArray()すでに配列であるものを呼び出すと、短絡して同じ配列インスタンスを返す可能性があるようです。ToArray()これにより、メソッドの要件が技術的に満たされますToArray。
簡単なテストから、.NET 4.0ではToArray()、配列を呼び出すと新しいインスタンスが返されるようです。私の質問は、これに頼ることができますか?ToArraySilverlightや.NETFrameworkの将来のバージョンでも、常に新しいインスタンスが返されることを保証できますか?この点で明確なドキュメントはどこかにありますか?