2012-06-22 27 views
24

Tôi hiện đang sử dụng Array.Copy chuyển một mảng như vậy:Là Array.Copy an toàn khi nguồn và đích là cùng một mảng?

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

Đó là đáng chú ý nhanh hơn so với sử dụng một vòng lặp. Tôi biết rằng các chức năng tương tự trong các ngôn ngữ khác (ví dụ như memcpy) là không xác định hoặc đôi khi phá vỡ khi trình biên dịch quá hung hăng. Có hợp lý để xem xét điều này an toàn trong .NET?

Trả lời

28

Có, nó an toàn. Đó là documented cách phương pháp này nên cư xử trong trường hợp này:

Nếu sourceArray và destinationArray chồng chéo, phương pháp này cư xử như thể các giá trị ban đầu của sourceArray được bảo quản trong một vị trí tạm thời trước khi destinationArray bị ghi đè.

+0

Điều này là do chức năng cơ sở được sử dụng là memmove và cho phép chồng chéo bộ nhớ. – Rahly

Các vấn đề liên quan