Vraag Is Array.Copy veilig wanneer de bron en het doel dezelfde array zijn?


Ik gebruik momenteel Array.Copy om een ​​array als zodanig te verplaatsen:

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

Het is sneller merkbaar dan het gebruik van een lus. Ik weet dat vergelijkbare functies in andere talen (bijvoorbeeld memcpy) niet gedefinieerd zijn of soms breken als de compiler te agressief wordt. Is het redelijk om dit als veilig te beschouwen in .NET?


26
2018-06-22 03:05


oorsprong


antwoorden:


Ja, het is veilig. Het is gedocumenteerd hoe de methode zich in dit geval zou moeten gedragen:

Als SourceArray en destinationArray elkaar overlappen, gedraagt ​​deze methode zich alsof de oorspronkelijke waarden van sourceArray zijn bewaard op een tijdelijke locatie voordat destinationArray wordt overschreven.


30
2018-06-22 03:07