A slice of an array is a range of elements. By using extension methods and generics, we simplify and clarify array slices.
In the C# language, extension methods make for more reusable and powerful code. We write and test an array slice method.
Consider an array of integers. We wish to take a slice of a certain range of integers. The first argument is the start index, and the second is the last index (exclusive).
Slice(2, 5): 1 2 3 4 5 6 7
Here we see a generic method, which lets it act on any type. Our Slice method here uses this ability to simulate the built-in slice functionality of Python and other languages.
class
contains a public static
method called Slice. The Slice method is an extension method.using System; using System.Collections.Generic; class Program { static void Main() { int[] a = new int[] { 1, 2, 3, 4, 5, 6, 7 }; foreach (int i in a.Slice(0, 1)) { Console.WriteLine(i); } Console.WriteLine(); foreach (int i in a.Slice(0, 2)) { Console.WriteLine(i); } Console.WriteLine(); foreach (int i in a.Slice(2, 5)) { Console.WriteLine(i); } Console.WriteLine(); foreach (int i in a.Slice(2, -3)) { Console.WriteLine(i); } } } public static class Extensions { /// <summary> /// Get the array slice between the two indexes. /// ... Inclusive for start index, exclusive for end index. /// </summary> public static T[] Slice<T>(this T[] source, int start, int end) { // Handles negative ends. if (end < 0) { end = source.Length + end; } int len = end - start; // Return new array. T[] res = new T[len]; for (int i = 0; i < len; i++) { res[i] = source[i + start]; } return res; } }1 1 2 3 4 5 3 4
When T (or a similar letter) appears in brackets after a method name, this is a generic method. The letter is replaced with the type specified.
How is this method different from LINQ Take
and Skip
? The method here can deal with negative parameters. And it may be faster because it doesn't use IEnumerable
.
string
slice methods, which are proven equivalent in the main aspects to JavaScript.Here we saw a generic array slice method that is also an extension method. An extension method is appropriate as the method can be used throughout a project.