我正在尝试将数组传递给 .NET 中的函数,但我有点困惑。数组是引用类型,因此对传递给函数的数组所做的更改在函数外部可见。例子
static void Main(string[] args)
{
byte[] arr = new byte[] { 1,2, 3, 4, 5 };
Console.WriteLine(string.Join("", arr)); //console output: 12345
doSomething(arr);
Console.WriteLine(string.Join("", arr)); //console output: 52341
}
static void doSomething(byte[] array)
{
byte tmp = array[0];
array[0] = array[array.Length - 1];
array[array.Length - 1] = tmp;
}
所以它与使用的“ref”关键字完全相同(相同的控制台输出)
doSomething(ref arr); for static void doSomething(ref byte[] array)
但是,如果我在函数中添加以下行:
array = (new byte[] { 1 }).Concat(array).ToArray(); //size of array is changed
结果不同:
12345
52341// "ref" keyword is not used
和
12345
152341 "ref" keyword is used
有人可以解释一下为什么结果不同吗?