C# 从一个方法返回多个数据项

在许多情况下,从一个方法返回一个值是不够的。需要使用一种方式来返回不止一个数据项。

使用 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);
posted @ 2019-01-24 16:20  lsy1991  阅读(2518)  评论(0编辑  收藏  举报