【发布时间】:2012-11-19 04:18:52
【问题描述】:
我正在尝试将数组传递给 .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
有人能解释一下为什么结果不同吗?
【问题讨论】:
标签: .net arrays parameters