C# 从一个方法返回多个数据项
在许多情况下,从一个方法返回一个值是不够的。需要使用一种方式来返回不止一个数据项。
使用 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);