2012-06-22 12 views
24

私は現在のような配列をシフトするArray.Copyを使用しています:ソースと宛先が同じ配列の場合、Array.Copyは安全ですか?

Array.Copy(array, 0, array, 1, array.Length - 1); 

これは、より高速なループを使用するよりも顕著です。コンパイラがあまりにも積極的になると、他の言語(例えばmemcpy)で同様の関数が定義されていないか、時にはブレークすることがあります。これを.NETで安全に考えることは合理的ですか?

答えて

28

はい、安全です。これは、この方法は、この場合にはどのように振る舞うべきかdocumentedある:destinationArrayが上書きされる前にsourceArrayの元の値を一時的な場所に保存されているかのよう

sourceArrayのとdestinationArray重複する場合、このメソッドは動作します。

+0

これは、使用されている基本機能がmemmoveであり、メモリオーバーラップが可能であるためです。 – Rahly

関連する問題