c#學習體會:使用 ref 和 out 傳遞數組(downmoon)希望與大家分享
與所有的 out 參數一樣在使用數組類型的 out 參數前必須先為其賦值即必須由接受方為其賦值例如

public static void MyMethod(out int[] arr)


{

arr = new int[
]; // 數組arr的明確委派

}
與所有的 ref 參數一樣
數組類型的 ref 參數必須由調用方明確賦值
因此不需要由接受方明確賦值
可以將數組類型的 ref 參數更改為調用的結果
例如
可以為數組賦以 null 值
或將其初始化為另一個數組
例如

public static void MyMethod(ref int[] arr)


{

arr = new int[
]; // arr初始化為一個新的數組

}
下面的兩個示例說明 out 和 ref 在將數組傳遞給方法上的用法差異
示例
在此例中在調用方(Main 方法)中聲明數組 myArray並在 FillArray 方法中初始化此數組然後將數組元素返回調用方並顯示

using System;

class TestOut


{

static public void FillArray(out int[] myArray)

{

// 初始化數組(必須):


myArray = new int[
]
{
};

}


static public void Main()

{

int[] myArray; // 初始化數組(不是必須的!)


// 傳遞數組給(使用out方式的)調用方:

FillArray(out myArray);


// 顯示數組元素

Console
WriteLine(
數組元素是:
);

for (int i=
; i < myArray
Length; i++)

Console
WriteLine(myArray[i]);

}

}
輸出
數組元素是:
示例
在此例中
在調用方(Main 方法)中初始化數組 myArray
並通過使用 ref 參數將其傳遞給 FillArray 方法
在 FillArray 方法中更新某些數組元素
然後將數組元素返回調用方並顯示

using System;

class TestRef


{

public static void FillArray(ref int[] arr)

{

// 根據需要創建一新的數組(不是必須的)

if (arr == null)

arr = new int[
];

// 否則填充數組
就可以了

arr[
] =
;

arr[
] =
;

}


static public void Main ()

{

//初始化數組:


int[] myArray =
{
};


// 使用ref傳遞數組:

FillArray(ref myArray);


//顯示更新後的數組元素:

Console
WriteLine(
數組元素是:
);

for (int i =
; i < myArray
Length; i++)

Console
WriteLine(myArray[i]);

}

}
輸出
數組元素是:
From:http://tw.wingwit.com/Article/program/net/201311/13303.html