我想做一些數組傳遞給.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;
}
所以它的工作原理完全一樣,與(同一控制檯輸出)
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
有人能解釋我爲什麼結果不同嗎?
[參數傳遞在C#](http://www.yoda.arachsys.com/csharp/parameters.html#ref) – sll