An array is a reference type.
You're not passing in a copy of the array, you're passing in a reference to it.
Here's a smaller LINQPad program that demonstrates:
void Main()
{
var a = new[] { 1, 2, 3 };
Test(a);
a.Dump();
}
public static void Test(int[] arr)
{
arr[1] = 15;
}
Output:
1
15
3
Longer description: When you pass a value to a method in C#, it's "pass by value" as default, meaning that you're passing in a copy of the value, not the actual variable itself.
In this case you're passing in a copy of the reference, but the reference is referencing an array.
Thus the method has its own reference to the array, but it's still working with the same array as the code "on the outside".