2012-06-22 9 views
24

Actualmente estoy usando Array.Copy para cambiar una matriz como por ejemplo:¿Array.Copy es seguro cuando la fuente y el destino son la misma matriz?

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

Es notable rápido que utilizar un bucle. Sé que funciones similares en otros lenguajes (por ejemplo, memcpy) no están definidas o algunas veces se rompen cuando el compilador se vuelve demasiado agresivo. ¿Es razonable considerar esto seguro en .NET?

Respuesta

28

Sí, es seguro. Es documented cómo el método debe comportarse en este caso:

Si sourceArray y la superposición destinationArray, este método se comporta como si los valores originales de sourceArray se conservaron en una ubicación temporal antes de destinationArray se sobrescribe.

+0

Esto se debe a que la función de base que se utiliza es memmove, y permite superposiciones de memoria. – Rahly

Cuestiones relacionadas