在許多情況下,從一個方法返回一個值是不夠的。需要使用一種方式來返回不止一個數據項。
使用 ref
或者 out
關鍵字
ref
或者 out
關鍵字在方法的簽名中使用out
關鍵字創建一個參數,指示這個參數由該方法初始化並返回。需要返回多個值時,這個技巧很有用。一個方法只有一個返回值,但通過使用out關鍵字,可以把多個參數標記為返回值。
out參數使用方法如下所示:
public void ExampleOut(int input, out int output1, out int output2)
{
output1 = input *= input;
output2 = input -= 4;
}
out
標記的參數不需要初始化,只需要傳入ExampleOut
方法中即可。
int output1;
int output2;
obj.ExampleOut(10,out output1,out output2);
ref
使用方法和 out
類似,不同之處是 ref
參數傳入方法時必須先初始化。
使用結構體
定義結構體 Output
public struct Output
{
public int output1;
public int output2;
}
使方法返回結構體
public Output ExampleStruct(int input)
{
Output objOutput = new Output();
objOutput.output1 = input *= input;
objOutput.output2 = input -= 4;
return objOutput
}
使用Tuple對象包含所有返回值
組元(Tuple)是C# 4.0引入的一個新特性,可以在.NET Framework 4.0或更高版本中使用。組元使用泛型來簡化類的定義,多用於方法的返回值。在函數需要返回多個類型的時候,就不必使用out , ref等關鍵字了,直接定義一個Tuple類型,使用起來非常方便。
public Tuple<int, int,int,int,int,string> ReturnDimensionAsTuple(int inputShape)
{
var objDim = Tuple.Create<int, int, int, int, int, string>(5, 20, 15, 25, 30, "777");
return objDim;
}
Tips
Tuple 中保存的的數據是不可變的,一旦通過構造函數或者靜態的Create方法將數據添加到Tuple中,就無法再修改這些數據了。
Tuple 可以接受並包含 8 個獨立的值。如果你需要 8 個以上的值,就需要使用這個特別的 Tuple 類。
Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> Class
當創建一個包含超過8個值的Tuple時,無法使用Tuple的Create方法,而是使用Tuple類的構造函數。下面的代碼創建了包含10個int的Tuple.
var values = new Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>> (1, 2, 3, 4, 5, 6, 7, new Tuple<int, int, int> (8, 9, 10));
Tuple中可以加入任意類型的數據,如下所示:
var values = Tuple.Create<int,string,object,byte>(12, "元組", new object(), 0x23);