ArraySegment
Often we need to track ranges in C# arrays. For example, part of an array might be used for a different purpose than other parts.
ArraySegment
is a generic struct
that stores information about an array range. We can create ArraySegments
and pass them to methods to operate on parts of arrays.
ArraySegment
must have a type parameter—this must match the array type. Once you construct the ArraySegment
, you can read the Array, Offset, and Count
to retrieve its fields.
Count
properties, and loop through the elements specified in the ArraySegment
.ArraySegment
is the array—this must have the same type of elements as the ArraySegment
.ArraySegment
.using System; // Create an ArraySegment from this array. int[] array = { 10, 20, 30 }; ArraySegment<int> segment = new ArraySegment<int>(array, 1, 2); // Write the array. Console.WriteLine("-- Array --"); int[] original = segment.Array; foreach (int value in original) { Console.WriteLine(value); } // Write the offset. Console.WriteLine("-- Offset --"); Console.WriteLine(segment.Offset); // Write the count. Console.WriteLine("-- Count --"); Console.WriteLine(segment.Count); // Write the elements in the range specified in the ArraySegment. Console.WriteLine("-- Range --"); for (int i = segment.Offset; i <= segment.Count; i++) { Console.WriteLine(segment.Array[i]); }-- Array -- 10 20 30 -- Offset -- 1 -- Count -- 2 -- Range -- 20 30
Let's say you have a large data array, and want to call methods that act upon different parts of this large array. Copying these parts would cause increased memory usage.
ArraySegment
to these methods as an argument. In these methods, use the ArraySegment
to access the large array.ArraySegment
allows you to specify a range inside a specific array. You can access properties of the ArraySegment
to access the original data and also the positional data.