Как скопировать элементы из массива ОТ и ДО?

Допустим есть массив {'1','2','3','4','5'} Нужно вырезать с 1 элемента по 3 элемент например (при этом элемент с этим номером не включится в вырезанную часть).

В общем нужен аналог метода slice из JavaScript .

Решение:

char[] arr = {'1','2','3','4','5'};
            string result = new string(arr);
            result.Substring(1, 3);

Ответы (1 шт):

Автор решения: Max S

В C# есть несколько возможностей получить подмассив из массива:

  1. С помощью встроенного языка запросов LINQ:

     var subArray = arr.Skip(1).Take(3).ToArray();
    
  2. С промежуточным использованием списков:

     var subArray = new List<char>(arr).GetRange(1, 3).ToArray();
    
  3. Начиная с C# 8.0 вы можете использовать Индексы и диапазоны:

     var subArray = arr[1..4];
    
  4. Воспользоваться методом Array.Copy():

     var subArray = new char[3];
     Array.Copy(arr, 1, subArray, 0, 3);
    

Если в вашем коде получение подмассивов – частая операция, можете реализовать свой универсальный метод расширения, например так:

public static class ArrayExtensions
{
    public static T[] SubArray<T>(this T[] source, int index, int length)
    {
        T[] result = new T[length];
        Array.Copy(source, index, result, 0, length);
        return result;
    }
}

И затем использовать в коде так (причем работать будет с массивом любых типов за счет применения обобщений):

var subArray = arr.SubArray(1, 3);

// массив чисел:
var intArray = new int[] { 0, 5, 10, 15, 20 };
intArray.SubArray(2, 2); // { 10, 15 }

// массив произвольных классов:
var myClassArray = new MyClass[10];
myClassArray.SubArray(6, 3);
→ Ссылка