zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    使用JSON.NET实现对象属性的格式化的自定义
    AspNetCore项目-Service注入或覆盖
    发布Nuget
    收藏
    工具
    快捷键大全
    SqlServer分页查询语句
    面试相关
    Eratosthes algrithm 求素数
    code training
  • 原文地址:https://www.cnblogs.com/lsy1991/p/10315144.html
Copyright © 2011-2022 走看看