Попробуйте сами:
string[] baseArray = { "a", "b", "c", "d", "e", "f" };
var arr = baseArray[1..^2];
Debug.WriteLine(arr[0]);
Debug.WriteLine(baseArray[1]);
arr[0] = "hello";
Debug.WriteLine(arr[0]);
Debug.WriteLine(baseArray[1]);
выход
b
b
hello
b
Можно сделать вывод, что массив string скопирован.
Однако, если мы используем массив объектов:
public class Foo
{
public string Bar { get; set; }
}
Foo[] baseArray =
{
new Foo { Bar = "a" },
new Foo { Bar = "b" },
new Foo { Bar = "c" },
new Foo { Bar = "d" },
new Foo { Bar = "e" },
new Foo { Bar = "f" }
};
var arr = baseArray[1..^2];
Debug.WriteLine(arr[0].Bar);
Debug.WriteLine(baseArray[1].Bar);
arr[0].Bar = "hello";
Debug.WriteLine(arr[0].Bar);
Debug.WriteLine(baseArray[1].Bar);
arr[0] = new Foo { Bar = "World" };
Debug.WriteLine(arr[0].Bar);
Debug.WriteLine(baseArray[1].Bar);
Это выводит
b
b
hello
hello
World
hello
Объекты в массиве не копируются, а имеют ссылки.
Установка другого объекта в массиве не повлияет на другой.