Home
Search
C# CopyTo String MethodInvoke the CopyTo method on the string type to copy a range of characters into a char array.
dot net perls
CopyTo. This C# method takes string characters and puts them into an array. It copies a group of characters from one source string into a character array.
string.Copy
Optimized code. This .NET string method provides optimized low-level code. When we need to copy chars from a string, CopyTo is a good solution.
An example. CopyTo() must be called on an instance of a string object. String objects in C# can be represented by string literals. So we can call CopyTo on a literal as well.
String Literal
New In this example, please notice how the char array variable is allocated before CopyTo is invoked.
Char Array
Void CopyTo() is void, and returns nothing. The char array in the program instead has its characters changed internally in CopyTo.
Note Arrays are indexed by their offsets. The fourth character where the CopyTo method begins copying is the letter "N."
Then That character and the 2 following characters are copied into the char array. The buffer's values are printed to the screen.
Console
C# program that uses CopyTo
using System; class Program { static void Main() { // Declare a string constant and an output array. string value1 = "Dot Net Perls"; char[] array1 = new char[3]; // Copy the fifth, sixth, and seventh characters to the array. value1.CopyTo(4, array1, 0, 3); // Output the array we copied to. Console.WriteLine("--- Destination array ---"); Console.WriteLine(array1.Length); Console.WriteLine(array1); } }
--- Destination array --- 3 Net
A benchmark. I wanted to know whether using CopyTo is faster than a for-loop on a short string. Should we use CopyTo in performance-critical methods?
Version 1 Copy chars from a string into a char array with CopyTo. Only 10 chars are copied.
Version 2 Copy those same 10 chars into the char array with a for-loop. Use an index expression to assign elements.
Result When tested in separate runs of the program on .NET 5 for Linux (in 2021), I find string CopyTo is faster.
Also CopyTo begins becoming much faster as the source string becomes longer. But even at 10 chars it is faster overall.
C# program that benchmarks CopyTo, for-loop
using System; using System.Diagnostics; class Program { const int _max = 100000000; static void Main() { char[] values = new char[100]; string temp = "0123456789"; // Version 1: use CopyTo. // Version 2: use for-loop. var s1 = Stopwatch.StartNew(); if (true) { for (int i = 0; i < _max; i++) { temp.CopyTo(0, values, 0, temp.Length); } } else { for (int i = 0; i < _max; i++) { for (int j = 0; j < temp.Length; j++) { values[j] = temp[j]; } } } s1.Stop(); Console.WriteLine(((double)(s1.Elapsed.TotalMilliseconds * 1000000) / _max).ToString("0.00 ns")); } }
7.38 ns, CopyTo 12.39 ns, For-loop
Internals. In .NET the CopyTo method is contained in an unsafe context, meaning it can access pointers directly. Using CopyTo is reliable because it has been extensively tested.
Wstrcpy The CopyTo method internally calls into wstrcpy, which is a heavily optimized and unrolled loop. It copies characters quickly.
Substring. In most .NET programs, the CopyTo method is not necessary. Instead, your programs will often use Substring to copy one range of characters to another.
Substring
But CopyTo() along with ToCharArray can be used as optimizations. And CopyTo can help when char arrays are needed by other methods.
ToCharArray
A summary. CopyTo() allows you to copy ranges of characters from a source string into target arrays. It is often not needed, but can replace a for-loop to copy chars.
Array
Home
© 2007-2021 sam allen. see site info on the changelog